You are not logged in.

VATAN İÇİN YAŞAYIP, VATAN İÇİN ÖLDÜLER ONLAR TOPRAĞA DEĞİL, KALPLERİMİZE GÖMÜLDÜLER..

  • "nedemgali" started this thread

Posts: 2,188

Date of registration: Sep 24th 2005

Level: 46 [?]

Experience: 5,331,704

Next Level: 6,058,010

Danksagungen: 305

  • Send private message

1

Friday, April 21st 2006, 4:56pm

PHP ile LDAP Uygulamaları

LDAP (Lightweight Directory Access Protocol), bir dizin servisi protokolü türevidir. Dizin servisleri hiyararşik bir yapıda (dizin yapısında), veriye merkezi olarak ulaşılması için düşünülmüş bir bakıma 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 Dizin Servisi:
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.

Örneğin bir kurumda çalışan personele ait bazı özellikler şunlar olabilir:object class=inetorgperson, entry'nin ait olduğu sınıf. Buradaki hiyerarşi top->person->orgperson->inetorgperson şeklinde düşünülebilir,
uid=hadi (UserID/sistemdeki kullanıcı adı),
cn=Mustafa Hadi Dilek (CommonName/kullanıcının adı soyadı),
sn=Dilek (SurName/kullanıcının soyadı),
mail=hadi@ulakbim.gov.tr (kullanıcının e-mail adresi),
telephonenumber=2989365 (kullanıcının ofis telefonu),
Genellikle sistemde yeni bir kullanıcı açarken 'inetorgperson' sınıfı kullanılır.

PHP ile LDAP Kullanımı:
PHP ile LDAP'a erişim oldukça kolaydır. İzlenmesi gereken sıra:

LDAP sunucusuna bağlanma (connect)
ldap_connect fonksiyonu ile LDAP sunucusuna soket bağlantısı açılır ve bir bağlantı numarası(link identifier) alınır.
LDAP sunucusuna belirli bir noktadan erişim için doğrulama (bind)
ldap_bind fonksiyonu ile sunucu veritabanında tanımlı bir kullanıcı olarak bağlantı kurulur. Bundan sonra kullanıcının sahip olduğu haklar ile sınırlanmış işlemler yapılabilir. Kullanıcı, dn özelliği ile belirtilir. Eğer dn ve password alanları girilmez ise bağlantı anonymous olarak gerçekleşir.
LDAP arama ve değiştirme türü işlevleri kullanma
ldap_search fonksiyonu ile verilen kriterlere (filter) göre arama yapılır. Sonuçlar bir sonuç numarası (result identifier) alınır.
ldap_modify fonksiyonu ile verilen verilen entry, yeni entry ile geğiştirilir. Girilen yeni entry çok boyutlu bir dizi olmalıdır.
Elde edilen sonuçları kullanma
ldap_get_entries fonksiyonu ile verilen sonuç numarasının gösterdiği sonuçlar çok boyutlu diziye alınır.
LDAP sunucusu ile bağlantıyı kesme (close connect)
ldap_close fonksiyonu sunucu bağlantısını kapatır.
Örnekler:
Telefon Defteri. LDAP üzerinden personel kayıtlarını görme, arama ve değişiklik olanağı. Kaynak kod:

index.php - Giriş scripti

<?
header("Location: rehber.php");
exit;
?>
login.php - Login scripti

<?
//-- Telefon Rehberi --
// login.php
// LDAP uzerinde degisiklik icin login ekrani uretir.
// Yazan: Mustafa Hadi Dilek, Subat 2000
//-------------
require("common.php");
if (!ValidateHOST()) {
CommonHeader("LDAP Sunucusuna Bağlan");
echo "Üzgünüz. LDAP bilgileri ancak Ulakbim içindeki bilgisayarlardan değiştirilebilir...";
CommonFooter($footer_links);
exit;
}

if(!isset($user)) $user="";

setcookie("user");
setcookie("pwd");

CommonHeader("LDAP Sunucusuna Bağlan");
//-------------
?>

<FORM ACTION="modify.php" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">

<?
//-------------
echo "<TABLE WIDTH=\""._WIDTH."\" BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"1\">\n";
//-------------
?>

<TR ALIGN="left" VALIGN="top">
<TD CLASS="formlabel">Kullanıcı Adı:&nbsp</TD>

<?
//-------------
echo "<TD CLASS=\"formvalue\"><INPUT NAME=\"user\" TYPE=\"Text\" VALUE=\"$user\"></INPUT></TD>";
//-------------
?>

</TR>
<TR ALIGN="left" VALIGN="top">
<TD CLASS="formlabel">Sifre:&nbsp</TD>
<TD CLASS="formvalue"><INPUT NAME="pwd" TYPE="Password"></INPUT></TD>
</TR>
<TR ALIGN="left" VALIGN="top">
<TD CLASS="formlabel">&nbsp;</TD>
<TD CLASS="formvalue"><INPUT NAME="submit" TYPE="Submit" VALUE="Bağlan"></INPUT></TD>
</TR>
</TABLE>
</FORM>

<?
$footer_links["rehber.php"] ="Ulakbim Telefon Rehberi";
CommonFooter($footer_links);

if (isset($empty)) echo "<SCRIPT>alert(\"Kullanıcı adı ve şifreyi girmelisiniz...\");</SCRIPT>\n";
if (isset($unauth)) echo "<SCRIPT>alert(\"Kullanıcı olarak tanımlanamadınız...\");</SCRIPT>\n";
if (isset($enablecookie)) echo "<SCRIPT>alert(\"Tarayıcınızda cookie'leri etkinleştirip tekrar deneyin\");</SCRIPT>\n";
?>
rehber.php - Arama ekranı içeren ana script

modify.php - Değişiklik formu üreten scripti

modify_res.php - Değişikliği uygulayıp sonuçları gösteren script

common.php - Ortak fonksiyon kütüphanesi

Yukarıda adı geçen dosyaları aşağıda görebilirsiniz.
http://www.internetdergisi.com/dosyalar/…/common.php.txt
http://www.internetdergisi.com/dosyalar/…1/index.php.txt
http://www.internetdergisi.com/dosyalar/…1/login.php.txt
http://www.internetdergisi.com/dosyalar/…/modify.php.txt
http://www.internetdergisi.com/dosyalar/…ify_res.php.txt
http://www.internetdergisi.com/dosyalar/…/rehber.php.txt

Counter:

Hits today: 225 | Hits yesterday: 2,677 | Hits record: 9,256 | Hits total: 761,786 Average hits: 2,216.66 | Clicks today: 6,860 | Clicks yesterday: 24,461 | Clicks total: 6,437,988 | Clicks record: 60,478 | Clicks avarage: 18,733.42 Counter age (days): 343.66 | Counts since: Jun 18th 2011, 2:13pm

Zirve1 en iyi Türk Siteleri
Zirve1 en iyi Türk Siteleri