PHP ile Sunucu Tabanlı Web Ugulamaları

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
PHP Nedir?

Rasmus Lerdorf tarafından öncelikle kendi kişisel web sayfalarını yazmak için geliştirilmesi nedeniyle 'P'ersonal 'H'ome 'P'ages adının kısaltması olarak karşımıza çıkan PHP, HTML gömülü (HTML-embedded) bir script dilidir. özellikle web uygulamaları geliştirenlerin dinamik ve havada (on the fly) üretilen web sayfalarını hızlı bir şekilde yazmaları için düşünülmüştür. Dilin sentaksı gelştirilirken C, Java ve en çok da Perl'den esinlenilmiştir. Bu nedenle bu dillerden her hangi birisini bilen bir kullanıcı için PHP'ye geçmek hiç de zor olmamaktadır.

Sunucu Tabanlı Uygulama Geliştirme

HyperText Transfer Protocol (HTTP)'nin ortaya çıkışı ile Internet gerçek kimliğine kavuştu. Bu sayede web sunucusu ile konuşan bir web browserinin sunucudan aldığı zengin içerikli bilgi uç kullanıcılara imaj, ses, video vs gibi zengin içerikte ve kullanıcı dostu bir ara yüzle ulaştırılabilir hale geldi.
Bu zengin içeriğin değişmeyen sayfalar olarak tutulması kullanıcılar için çok şey ifade etmediği için onlara içeriği otomatik değişebilen, havada üretilen ve hatta veri tabanı erişimi sunan siteler oluşturmak için çok çeşitli teknolojiler geliştirildi.

Webde dinamik sayfalar oluşturmanın temel olarak iki yolu vardır:
  • Sunucu tarafında çalışan (server-sided) uygulamalar kullanmak
  • İstemci tarafında çalışan (client-sided) uygulamalar kullanmak
İstemci tarafında çalışan uygulama olarak Java Appletleri veya Netscape'in JavaScript'i veya Microsoft'un VBScript'i gibi script dilleri kullanılabilir. Avantajları:
  • Sunucuyu meşgul etmemesi. Veri girişi kontrolleri (data validation), menüler, genişleyebilir listeler gibi istemci tarafında yapılabilecek işler için sunucu meşgul edilmemiş olur.
  • Bant genişliğini etkili kullanma. Yukarıdaki avantaj bant genişliğini de etkilemiş oluyor.
Sunucu tarafında çalışan (server-sided) uygulamalar kullanmak ise şu noktalarda istemci tarafı uygulamalara üstünlük sağlıyor:
  • Web tarayıcılarında scriptler için standart bulunmamaktadır. Bu nedenle bir tarayıcıda çalışan bir script diğerinde çalışmayabilir. Tarayıcıların java appletlerini yorumlamada kullandıklarıjava sınıflarının versiyonu sizin appletinizi çalıştıramayabilir. Kullanıcıdan yeni sınıfları download etmesini sağlamanız gerekebilir.
  • Sunucu tarafta çalışmasıı zorunlu bazı uygulamalar olabilir (veri tabanı erişimi, işletim sistemi komutları veya başka bazı araçlar ancak sunucu üzerinde çalıştırılabilirler).
  • Bant genişliğini kullanım açısından işlemlerin önemli bir bölümünün sunucu tarafında yapılması gerekebilir. (Bir veri tabanı sunucusuna evimden sunucuya ait bir istemci yazılımla bağlandığım taktirde pekçok ara komutun iletilmesi sözkonusu olabilir. Sunucu tabanlı uygulamam ise benden sadece sorguyu alacak ve bana da sadece sonucu gönderecektir. Bu noktada HTTP protokolünün bindireceği yük de hızı azaltabilir. Kurulacak denge önemli.)
  • Uygulamaların güncel tutulması ve bunu yaparken de istemciler üzerinde değişiklik yapılmayıp sadece sunucu üzerinde (tek bir merkezden) gereken değişikliği yapmak tercih edilebilir.
Günümüzde sunucu tarafı uygulama geliştirme yönünde genel bir eğilim bulunuyor. Uygulamaların tek bir merkezden sunumu ve hatta kullnıcılara program değil network üzerinden hizmet satma giderek daha çok önem kazanıyor.
Ancak web tarayıcılarının neredeyse bir işletim sistemi kadar şiştiği günümüzde hem istemci hem de sunucu taraflarda yukarıdaki faktörleri göz önüne alarak dengeyi koruyacak şekilde uygulamala geliştirmek gerkiyor.
 

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
Neden PHP?

Hem UNIX, hem Linux, hem de Windows için hazır

Kaynak kodu açık olarak dağıtılan PHP, Linux, Solaris, HP-UX, IRIX, FreeBSD vb üzerinde rahatlıkla derlenip çalıştırılabilir. Kendi başına derlenip web serverden cgi programı olarak çağrılabilir. Ancak hız ve güvenlik açısından sakınca oluşturduğu için özellikle Apache web sunucusu ile birlikte modül olarak derlenmesi tavsiye ediliyor.
Windows-NT ortamında da, Internet Information Server(IIS) ile çalışmak üzere kullanılabilmekte.

Yüksek Performans (Zend'in yorumlayıcı motoru ile şimdi çok hızlı)

PHP 3.x versiyonları popüler olmalarına rağmen ASP yorumlayıcısına karşı yavaş kalıyorlardı. PHP, 4.0 versiyonunda Zend firmasının script yorumlayıcı motorunu kullanılarak tamamen yenilendi ve hız olarak ASP ile yarışır hale geldi. Zend'in kendi yaptığı testlerde PHP3.x ile PHP4.x arasındaki fark gözlenebilmekte:
100MHz Pentium işlemci ve 24MB hafızalı Linux kurulu bir sistemde şu sonuçlar alınmış:
PHP3.0.6PHP/ZendPHP/Zend+optimizerSüreSürePerformans ArtışıSürePerformans ArtışıQuickSort algoritması (1000 öge)5:26min.1:11min.460%31sec.1050%QuickSort algoritması (10 öge)0.1sec0.06sec60%0.06sec66%MySQL'de tablo listeleme (1000 kayıt)4.35sec.0.83sec.525%0.57sec.765%MySQL'de tablo listeleme (10 kayıt)1.1sec.0.6sec.185%0.5sec.220%
PHP 4.0 pre-alpha versiyonu ile Microsoft'un ASP'si arasında yapılan benchmark sonuçları ilginç. QuickSort algoritması çalıştıran özdeş ASP ve PHP scriptleri 128 MB RAM'li P2-233 sistemi üzerinde Windows NT/Service Pack4 ve web server olarak IIS 4.0 kullanılarak çalıştırılıyorlar. Burada PHP yorumlayıcısı ISAPI modülü olarak çalışıyor ve işletim sisteminin NT ve web serverin IIS olması ASP için bir avantaj olması gerekirken hiç de öyle olmuyor:
ASPPHP/ZendPHP/Zend+optimizerSüreSürePerformans ArtışıSürePerformans ArtışıBasit Döngü (10 Milyon iterasyon)44sec.43sec.2%12.5sec.352%QuickSort algoritması (200 öge)10sec.44sec-440%6sec.66%
Ayrıca ASP özellikle yoğun hit alınan durumlarda web sunucusunu yavaşlatırken, modül olarak kurulu Apache-PHP ikilisinde bu sorun pek yaşanmıyor.
PHP/Zend yorumlayıcısı ücretsiz olacak. Ancak Zend firması PHP nin optimizer'li yorumlayıcısını ücretli dağıtmayı düşünüyor.
PHP'nin hızlı olması Ulakbim web sitesinde de parser olarak kullanmamız için tercih sebeplerinden biri oldu. Şu an sitedeki tüm sayfalar bir php scriptinden geçip havada üretilerek tarayıcılara gönderilmekte.

Büyük ölçekli veri tabanı uygulamaları için ideal (ODBC, MySQL, PosgreSQL, Oracle ve diğerleri için arayüz desteği)

ASP ve Cold Fusion gibi araçlar özellikle veri tabanlarına bağlanıp ve kullanabilme gibi özellikleri ile ön plana çıkmışlardır. PHP de arayüz oluşturduğu veritabanı yönetim sistemlerinin çeşitliliği ile ön plana çıkıyor. PHP ile birlikte:
  • MySQL
  • mSQL
  • PosgreSQL
  • ORACLE
  • MS-SQL Server
  • Sybase
  • Informix
  • InterBase
  • Solid
gibi popüler veri tabanları kullanılabiliyor.
Internet standartlarına uyumluluk (LDAP, IMAP, FTP, NNTP, TCP gibi standartlara açılan bir kapı)

PHP açık standartları desteklemektedir. Ona http protokolü ile ilişkisi olmayan pek çok işi yaptırabilirsiniz. Üstelik tüm bu standartların web'e çıkış kapısı olabilir. PHP derlenirken bazı opsiyonlar ve kütüphaneler kullanılarak çok fonksiyonlu bir araç haline getirilebilir.
Kurum içi personel bilgilerinin tutulduğu bir LDAP sunucusuna erişim, sorgulama ve değişiklik yaptırılabilir, tamamen özelleşmiş web mail veya web news arabirimleri oluşturulabilir, FTP veTelnet istemcilerinin yerini alabilir. TCP soketleri kullanarak kendinize özgü istemci sunucu uygulamalar bile geliştirebirsiniz.
Bunları yaparken muhtemelen Internet'e iyi bir bağlantısı olan ve güçlü donanım özelliklerine sahip bir sunucu tarafında uygulamaları çalıştırıyor olmanın avantajlarından yararlanırsınız.
Üretilen uygulamaların yönetimi de tamamen otomatik veya yine web üzerinden çok az yönetimsel fonksiyon gerektirecek hale getirilebilir.

Gelişmiş Özellikler (Oturum Yönetimi, Semafor ve Paylaşımlı Hafıza kullanım, Cookiler, Sürekli Veritabanı Bağlantısı)

PHP, oturum yönetimi (session management) konusunda da oldukça iyi.
PHP'de bu özellik Netscape Enterprise Server üzerinde kullanılan ServerSideJavaScript kadar gelişmiş ve kolay kullanılır değil. NSEnterprise Server, SSJS ile geliştirilmiş uygulamaları çağrılmadan önce hafızaya yüklüyor ve bunların ortak kullanabileceği hiyerarşik session objectleri tanımlıyor. Bu ise işinizi gerçekten kolaylaştırıyor. PHP'ye de aynı işi yaptırabilirsiniz ancak PHP'de scriptler ancak çağrılınca hafızaya alındığı için bu iş için biraz uğraşmanız gerekiyor. Paylaşımlı hafıza (shared memory) ve semafor kullanmak durumundasınız.
İstemci tarafına cookie kullanarak oturum bilgisini atmanız da PHP ile oldukça kolay.
Sürekli Veritabanı Bağlantısı (Persistent Database Connections) özelliği veri tabanı uygulamalarında hızı oldukça arttıran bir faktör. Normalde bir kullanıcı veri tabanıyla ilgili bir iş yapmak için web sunucuya birden çok istem iletir. Cgi programları aynı kullanıcının her istemi için veri tabanı sunucusuna yeni bir bağlantı kurar. PHP ile persistent connection kullanıldığında sadece ilk request için veri tabanı bağlantısı kurulup sonra aynı bağlantı numarası (connection handle) kullanılarak bağlanılabiliyor. Authentication ve authorization için gereken gereksiz bir yığın işten kurtulunuyor.

Ekonomik (Bedava :))

PHP, General Public Liscense ile ücretsiz dağıtılmaktadır. Aynı şekilde MySQL'in de kaynak kodları açıktır. İşletim sistemini de ucuza getirmek istiyorsanız size uyan bir Linux paketi ile komle bir web tabanlı uygulama ve intranet platformu edindiniz demektir. Bu durumda harcamalar neredeyse tamamen donanıma gidecektir. Üstelik oldukça pahalı olan diğer çözümlere yakın (hatta bazı yönlerden daha iyi) bir yetkinlikte ihtiyaçlarınıza cevap verildiğini göreceksiniz.
 

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
PHP'ye giriş

PHP kendi yorumlayıcısı ile birlikte kullanılan bir script dilidir. Bu yorumlayıcının yaptığı aslında HTML kodları arasına yerleştirilmiş PHP kodlarını ayrıştırıp işleyerek sonuçta saf HTML formatında bir çıktı üretmek web sunucuya iletmektir.
PHP, UNIX sistemleri üzerinde kullanılacak ise modül olarak veya CGI olarak kurulabilir. CGI olarak kurulduğunda web sunucunun uid'i dışındaki kullanıcı kimikleri altında program çalıştırabilme esnekliği vermesine karşın bu güvenlik açısından risklidir. Ayrıca CGI programı olarak yüklendiğinde, kullanıcıların her istemi için PHP yorumlayıcısının tekrar tekrar hafızaya yüklenmesinin kaynak ve zaman kullanımı açısından maliyeti yüksektir. Bu nedenlerle modül olarak kurulması ve web sunucu ile birlikte hafızaya yüklenmesi bu sakıncaları ortadan kaldırmaktadır. Tek dezavantajı upgrade gerektiğinde web sunucu ile birlikte tekrar derlenmesinin gerekmesidir.
PHP WindowsNT ortamına kurulacaksa ISAPI modülü olarak derlenip IIS ile birlikte kullanılması gerekir.
Dilin Yapısı

PHP, HTML gömülü bir dildir. Yani aynı dosya içinde hem HTML, hem de PHP kodu kullanılabilmektedir. Kod içinde HTML'den PHP'ye geçmek için bazı ayıraçlar kullanılması gerekir. Örneğin:
<TABLE SIZE="500"> <TR> <TD><? Buraya PHP kodu yazılacak ?><TD> ...HTML taglari içinde de PHP kullanmak için şu metod seçilmeli:
<TABLE SIZE="<?PHP Buraha PHP kodu yazılacak ?>" ...Veya:
<script language="php"> Buraya PHP kodu yazılacak</script>Ve İlk 'Hello World' cümlemiz:
<html><head> <title>Example</title></head><body> <? echo "Hello World..."; ?></body></html>Browser bunu bize:
Hello World...şeklinde gösterecektir.
PHP'nin en güzel özelliklerinden birisi php dışından gelen değişkenlerin çok rahat kullanılabilmesi:
<form action="foo.php3" method="post"> Adınız: <input type="text" ad="name"><br> <input type="submit" name="submit" value="Tamam"></form>Yukarıdaki formdan gönderilen değişkenler php içinde aşağıdaki gibi doğrudan kullanılanılabilir:
<? echo "Adiniz:".$name; ?>PHP, integer, float, string, array gibi çeşitli değişken tipleri içerir. Ancak değişkelerinizin tipi sabit değildir. Yani çalışma anında değişkeninizin tipini değiştirebilirsiniz (type juggling):
$foo = "0"; // $foo is string (ASCII 48)$foo++; // $foo is the string "1" (ASCII 49)$foo += 1; // $foo is now an integer (2)$foo = $foo + 1.3; // $foo is now a double (3.3)$foo = 5 + "10 Little Piggies"; // $foo is integer (15)$foo = 5 + "10 Small Pigs"; // $foo is integer (15)Burada istenmeyen durumlar oluşmaması için type casting kullanılarak değişkenin değerinin nasıl yorumlanmasını istediğimizi belirtebiliriz.
Static değişkenler kullanılarak fonksiyonlara gerri dönüşlerde değişkenin son aldığı değer kullanılabilir:
Variable variable'lar oldukça ilginç bir yaklaşım. Yalnızca recursive yapılabileceğini düşündüğünüz pekçok işi bunlara yaptırabilirsiniz. Örneğin aşağıdaki kod çıktı olarak 'hello world' basar:
$a = "hello"; $aa = "world"; echo "$a $a{$a}";Recursive fonksiyon çağrıları yapılabilir.
Diziler çalışma aında büyüyebilir. ( Bu özellik PHP yorumlayıcı konfigürasyonunda gerekli ayar yapılmadan dikkatsiz kullanılırsa işletim sisteminin bile göçmesine sebep olabilir).
B>eval</B> fonksiyonu kullanılarak kod içeriği dinamik olarak oluşturulabilir. ( Sağlamlık ve güvenlik açısından riskli bir komut ):
eval( "echo \"Merhaba\"" );PHP, Perl veya benzeri araçların sunduğu regular expression desteğini de vermektedir. Bu sayede karmaşık metin işleme (text processing) veya parsing işlemleri çok az komut yazılarak gerçekleştirilebilmektedir. Örneğin string olarak tutulan HTML formatındaki içerikteki tüm etiketler büyük harf yapılabilir:
preg_replace("/(<\/?)(\w+)([^>]*>)/e","'\\1'.strtoupper('\\2').'\\3'",$html_body);
 

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
PHP ile uygulama geliştirme

MySQL Veri Tabanı Yönetim Sistemi

MySQL, çok-kanallı (multi-threaded), çok kullanılıcılı (multi-user), hızlı ve sağlam (robust) bir veritabanı yönetim sistemidir. UNIX ve OS/2 platformları için ücretsiz dağıtılmakla birlikte Windows platformları için 30 günlük deneme sürümü sonunda lisans alınmak üzere sunulmaktadır. Kaynak kodu açık olan MySQL'in pekçok platform için binaryleri de hazır. ODBC sürücüleri de bulunuyor.
Geliştiricileri, 500'den fazlası 7Milyon kayıt içeren 10,000 tablodan oluşan kendi veritabanlarını (100 gigabyte civarında veri) MySQL'de tuttuklarını söylüyorlar.
MySQL, tuttuğu tablolarla, çok kullanıcılı bir sistemlerde sözkonusu olan erişim hakları sorununu çok güzel çözüyor.
Negatif bir yön olarak MySQL'de transactionların desteklenmemesi, transactionların güvenliğini sağlama işini programcının üzerine yıkıyor.
Ayrıca referential integrity sağlama işinin programcıya bırakılması tercih edilmiş. Ancak bu bir dezavantaj olarak görülmeyebilir. Çünkü pek çok veritabanı programcısı VTYS'lerdeki referential integrity'nin esnek olmayan, zorlayıcı bir özellik olduğunu düşünmektedir.

PHP Arayüzü

PHP ile MySQL tablolarını kullanmak oldukça kolay. İzlenmesi gereken sıra:
  • Veritabanı sunucusuna bağlanma (mysql_connect, vs... gibi komutlar ile) ve bir bağlantı numarası (link identifier) alma,
  • Bu bağlantıyı kullanarak belirli bir veritabanı üzerine konumlanma (my_sql_select_db, vs...),
  • Yine bu bağlantıyı kullanarak sunucuya bir sorgu yöneltme (mysql_db_query, vs... gibi komutlar ile) ve bir sonuç numarası alma (result identifier),
  • Bu sonucu (bir nevi view) PHP değişkenlerine aktararak kullanma (mysql_fetch_row, vs...),
  • Sunucu ile bağlantıyı kesme (sürekli olmayan bağlantılar için mysql_close kullanılabilir veya script işletimi sonlanınca zaten bağlantı kesilir, sürekli bağlantılar ise web server durduruluncaya veya bağlantı sayısı belli bir değeri aşıncaya kadar açık kalır),
şeklindedir.
 

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
LDAP Kullanımı

LDAP (Lightweight Directory Access Protocol), bir nevi dizin servisi standardıdır. Dizin servisleri hiyararşik bir yapıda (dizin yapısında), veriye merkezi olarak ulaşılması için düşünülmüş bir nevi veritabanı hizmeti veren sistemlerdir. Açık sistem olması dünya üzerinde global olarak erişilebilir bilgi kaynakları oluşturulabilmesini sağlar. Bunu yaparken coğrafi yapı (ülke, şehir), kurum içi organizasyon ve diğer özellikleri içeren hiyerarşik bir yapı kullanır.
Özellikle kurum içi organizasyon ve personelin kayıtlarının tutulabileceği elverişli bir ortam sunar. Bir kurumda çalışan veya bir üniversitede okuyan öğrencilere çeşitli servisler sunmanız gerekir. Bunun için her servisin üzerinde çalıştığı makinada ayrı ayrı kullanıcı hesapları açmanız gerekebilir. Böyle olunca sistemin ve kullanıcıların yönetimi zorlaşır. LDAP kullanarak bu sorun çözülebilir.
Kuruma giren personel için LDAP sunucusuna tek bir entry eklersiniz ve LDAP desteği veren servislerin bu sunucu üzerinden kullanıcı bilgilerine erişim ve doğrulama yapmalarını sağlayabilirsiniz.
PHP'de LDAP için iyi bir arabirim sunmaktadır. Bu sayede web uygulamalarınızda da LDAP kullanılabilmekte ve özellikle kullanıcılara kendilerine ait verileri güncelleyebilme olanağı sunuluyor.

LDAP servisleri

LDAP dizinleme sisteminde her kayda ait özellikler (attributes) ve bu özelliklerin değerleri (values) vardır. Her kaydın ait olduğu bir nesne sınıfı (object class) vardır. Bu yapı sayesinde dünya üzerindeki her LDAP kaydı biricik olur. Bunun için DNS de olduğu gibi hiyerarşik bir isimlendirme kullanılmıştır. Kullanıcı bu biricikliğini DN (Distinguished Name) özelliğinden alır.

Örneğin dn='cn=Mustafa Hadi Dilek, o=Ulakbim, c=tr' benim Türkiye içinde, Ulakbim adlı kuruluşta, adı 'Mustafa Hadi Dilek' olan kişi olduğumu söyler ve biriciktir.
Personele ait bazı özellikler şunlardır:
  • uid (User ID), sistemdeki kullanıcı adı,
  • cn (Common Name), kullanıcının adı soyadı,
  • sn, kullanıcının soyadı,
  • mail, kullanıcının e-mail adresi,
  • telephonenumber, kullanıcının telefonu
PHP Arayüzü

PHP ile LDAP erişimi oldukça kolaydır. İzlenmesi gereken sıra:
  • LDAP sunucusuna bağlanma (ldap_connect) ve bir bağlantı numarası (link identifier) alma,
  • Bu bağlantıyı ve doğrulama bilgileri kullanarak sunucuya login olma (ldap_bind),
  • Bind edilmiş bu bağlantıyı kullnarak LDAP işlevleri gerçekleştirme (ldap_search, ldap_modify, vs...),
  • Elde edilen sonuçları associative dizilere aktararak kullanma (ldap_get_entries, vs...),
Örnek Uygulama (LDAP Web Geçidi)

PHP'yi LDAP geçidi olarak kullanmak için 'Netscape Directory SDK for C' si veya OpenLdap client kütüphaneleri kurulu olmalı ve PHP derlenirken bu kütüphaneler belirtilmelidir. Her iki client librarysi de Internet'den ücretsiz olarak çekilebilir.
Sunucu olarak Netscape Directory Server 4.3 kullanmamıza rağmen, istemci tarafında OpenLDAP 1.2 clientleri kullandık. PHP olarak 4.0.3 beta versiyonu kullanıldı. LDAP search işlevinde sorunla karşılaşmazken modify işlevinde sorunla karşılaştık (PHP'nin beta versiyonu olmasından kaynaklanıyor sanırım) ve bu sorunu da şimdilik yine OpenLDAP'ın ldapmodify programını shell'den çağırarak çözdük.
Arama için açılan formda gerekli kriterler ve arama metni giriliyor:
ldapsearch.gif

Form submit edilince çağrılan php scriptinde önce sunucuya bağlantı kuruluyor. Sunucu standart olarak '339' numaralı portu kullanır:
$myconnection=ldap_connect(_HOST,"339");Anonymous olarak login olunuyor:
ldap_bind($myconnection);Şmdi arama komutu için:
  • Aramanın yapılacağı alan (base dn): 'o=ulakbim'
  • Filtre: Formdan gelen değere göre örneğin 'cn=Mustafa Hadi Dilek'
parametreleri de kullanılarak:
$res = ldap_search($myconnection, "o=ulakbim", $filtertype."=".$filtertext);Elde edilen sonuç numarası kullanılarak sonuçlar çok boyutlu bir sizi içine alınıyor:
$info = ldap_get_entries($myconnection, $result);Bu dizi, dinamik tablo oluşturularak tarayıcıya gönderiliyor:
ldapres.gif

Beliri alanlar için her kullanıcının kendi LDAP entrysini değiştirebilbesi sağlanabilmelidir. Bunun için önce LDAP sunucusuna anonymous olarak değil, geçerli bir kullanıcı olarak bağlantı kurmalıdır:
ldaplogin.gif

Alınan kullanıcı adı ve şifre bu defa binding işlemi için kullanılıyor:
$dn = "uid=".$user.",o=ulakbim";if (!($r = @ldap_bind($myconnection, $dn, $pwd))) { @header("Location: ldap_login.php?unauth=YES"); exit;}Bu aşamadan başarı ile geçilirse değişiklik formu alanların içleri dolu olarak kullanıcıya gönderiliyor:
ldapmodify.gif

Kullanıcı bu formu kullanarak entrysini değiştirebilir. PHP 4.0.3 betasında ldap_modify doğru çalışmadığı için kendi fonksiyonumuzu kullandık:
//--- Herhangi LDAP client yaziliminda bulunan ldapmodify programini kullanarak //--- LDAP entrysinde degisiklik yapar //--- Input parametreleri: //----- Kullanicinin distinguished name (dn) bilgisi, //----- Kullanicinin LDAP serverdeki sifresi, //----- Degisiklikleri iceren bir hash array //--- Burada bir modify stringi, standart ldif formatinda olusturulur. //--- Bu format 'man ldapmodify' ile gorulebilir. //--- Veya Michigan Universitesinin ldap manual web sayfasinda ayrintili olarak var. //--- www.umich.edu dan aranabilir. function my_ldap_modify($dn, $pwd, $changes) { $modifystr = _QUOTE."dn: ".$dn._CRLF."changetype: modify"._CRLF; while(list($key,$val)=each($changes)) { $modifystr = $modifystr."replace: ".$key._CRLF.$key.": ".$val._CRLF."-"._CRLF; } $modifystr = $modifystr._QUOTE; exec("printf ".$modifystr." | "._LDAP_DIR._LDAP_MODIFY." -h "._HOST." -p "._PORT." -D ".$dn." -w ".$pwd); } //-----------------------------------/
 

DELİKURT

Dost Üyeler
Katılım
12 Haz 2008
Mesajlar
1,103
Tepkime puanı
0
Puanları
0
Konum
Turan
Session Management (Shared Memory, Semaphores, Cookies, Locking)

Kullanıcı web sunucusuna bağlandıktan sonra yapacağı her işlem için o an hangi aşamada olunduğu bilgisi bilinmelidir. Bunun için oturum bilgisinin bir şekilde tutulmalısı gerekir. Bu durum session management kapsamına girmektedir.
Cookiler session management sorununu client tarafında çözen bir yoldur. Cookie'ler isim, değer, zaman aşımı süresi gibi bilgiler içerebilirler.
İstemcilere cookie göndermek için 'setcookie' fonksiyonu kullanılir.
İstemcilerden gelen cookieler ise $HTTP_COOKIE_VARS global associative arrayından cookie adı index olarak verilerek okunabilir.
Cookieleri sisteminizde tanımlı kullanıcıları ayırdetmekte kullanabilirsiniz. LDAP sunucusu bağlantısı için kullanıcı adı ve şifresini tekrar tekrar girmemesini sağlamak için ilk olarak login ekranını gönderen script içinde komutları ile browserlerindeki user ve pwd cookieleri temizleniyor:
setcookie("user");setcookie("pwd");Sonra formdan girilen değerler ikinci bir scriptde browsere set edilir:
setcookie("user", $user);setcookie("pwd" , $pwd);Doğrulamanın yapılacağı scriptte bu değerler alınıyor:
$user = $HTTP_COOKIE_VARS["user"];$pwd = $HTTP_COOKIE_VARS["pwd"];Bu metod çalışmakla birlikte yalnızca güvenli olduğunu düşündüğünüz bir bölgede kullanılmalıdır. Aksi taktirde HTTP üzerinden açık bir şekilde giden kullanıcı adı ve şifresi rahatça alınabilir. Bu nedenle authentication gereken web bölgeleri ve uygulamaları için secure socket layer kullanılması (HTTPS protokolü üzerinden) önerilir.
Ayrıca setcookie fonksiyonuyla sadece HTTPS kullanılıyorsa cookie göndermesi sağlanabilir.
NSEnterprise Server'deki session objectlerini karşılayacak yapılar shared memory ve semafor kullanılarak kurulabilir. Hafızada script ömrüyle sınırlı olmayan alanlar ayırmak için shared memory fonksiyonları kullanılabilir. Aynı scriptin hafızadaki tüm kopyalarının okuyabileceği paylaşılabilir bir alan yaratılır:
define(_SHMKEY,1000); // Kendi atadığımız bir değer -- biricik olmalıdefine(_SHMSIZE,1000); // 1000 Bytelık bir alandefine(_SHMPERM,"600"); // Yalnızca web sunucunun uid'sine sahip kullanıcı okuyup yazabilsin $shm_id = shm_attach(_SHMKEY,_SHMSIZE,_SHMPERM);Artık shared memoy'mizden okumak için:
$value = shm_get_var($shm_id, $index);Shared memory'e yazmak için:
shm_put_var($shm_id, $index, $value);kullanılabilir. Burada '$index' tamsayı olmak zorudadır. Fakat shared memor'ye bu şekilde erişmek güvenli olamayacağı için semafor kullanımı şarttır:
define(_SEMKEY,1234); // Kendi atadığımız bir değer -- biricik olmalıdefine(_SEMPERM,"600"); // Yalnızca web sunucunun uid'sine sahip kullanıcı bu semaforu kullanabilsin $sem_id = sem_get(_SEMKEY, 1, _SEMPERM);Şimdi shared memory işlemlerinin yapılacağı kritik kesim semafor işleçleri arasına alınarak sözkonusu hafıza bölgesi güvenli bir şekilde kullanılabilir:
sem_acquire($sem_id); //--- Semafor aynı scriptin başka bir kopyası tarafından alınmışsa burada bekler{ Kritik kesim }sem_release($sem_id);Burada dikkat edilmesi gereken nokta web sunucunun uid'i ile çalışan herhangibir görevin shared memory alanına erişebileceği riskidir.
 
Üst