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:

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:
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:

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:

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:

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);
}
//-----------------------------------/