|
PHP กับ LDAP พื้นฐาน (พื้นฐานการเขียน PHP เชื่อมต่อ Protocal LDAP) |
PHP กับ LDAP พื้นฐาน (พื้นฐานการเขียน PHP เชื่อมต่อ Protocal LDAP) ก่อนอื่น สมมุติว่าทุกๆท่านรู้จัก LDAP Server กันแล้วนะครับว่าคืออะไร ใช้ยังไง
ตอนแรกต้องทดสอบก่อนว่า Server เราสามารถใช้ LDAP extension ได้ไหม
วิธีทดสอบมี 3 วิธีคือ
1. สร้างแฟ้มสำหรับแสดงรายละเอียดของ php สมมุติชื่อ phpinfo.php
Code (PHP)
phpinfo();
สร้างเสร็จแล้ว ก้เรียกใช้ ผ่าน Browser อะไรก็ได้ มองหาตารางคล้ายๆกับตารางนี้
ldap
LDAP Support enabled
RCS Version $Id: ldap.c,v 1.154.2.7 2005/07/09 01:00:11 sniper Exp $
Total Links 0/unlimited
API Version 2004
Vendor Name OpenLDAP
Vendor Version 20129
ถ้าสามารถหาเจอ และตรง LDAP Support เขียนว่า enabled ก็แปลว่า Server คุณสามารถใช้ ldap ได้
2. สร้างแฟ้มสำหรับเรียกใชโดยตรง เช่น test1.php
Code (PHP)
ldap_connect(?localhost?);
ถ้ามันขึ้นแบบนี้
Code
Fatal error: Call to undefined function: ldap_connect () in /XXXX/i.php on line 2
ก็แปลว่าเครื่องคุณไม่สามารถใช้ ldap ได้
3. สร้างแฟ้มสำหรับทดสอบ function โดยเฉพาะ เช่น test_function.php
Code (PHP)
alert('สามารถใช้ Function $function ได้');
$function=$_POST["function"];
if($function){
if(function_exists($function)){
echo"Funtion นี้ใช้ได้";
}else{
echo"Funtion นี้ใช้ไม่ได้";
}
}
คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ไม่ได้ ก็ต้องคอมไพล์ php กันใหม่ครับ ให้ใช้ ?with-ldap ด้วยนะครับ
คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ได้
ขั้นตอนมันก็ไม่มีอะไรมาก
จะสามารถแบ่งได้ 3 ขั้นตอนคือ (อันนี้ผมแบ่งเองนะครับ)
1. ติดต่อกับ LDAP Server
ตอนแรกก็ติดต่อกับ LDAP Server ก่อนนะครับ
Code (PHP)
$ds=ldap_connect(?localhost?,?389?)
ตรง localhost ให้เปลี่ยนเป็น ip หรือชื่อเครื่อง Server ถ้า LAP Server เป็นเครื่องอื่น และ port ปกติ
ของ LDAP คือ 389 ครับ ตรงนี้ไม่ต้องใสก็ได้ ก็เป็น
Code (PHP)
ldap_connect(?localhost?)
หลังจากติดต่อได้แล้วก็ต้องแสดงว่าใครคือผู้ติดต่อโดยใช้คำสั่งนี้ครับ
ldapbind = ldap_bind($ds, $binddn, $password);
ส่วนนี้อาจจะพูดได้ว่าเป็นการ Login หรือการ ตรวจสอบการ Login ก็ได้ครับ ซึ่งผมเองได้เขียน
Function สำหรับการตรวจสอบ Login ดังตัวอย่างครับ
Code (PHP)
function ldap_login($ds,$username,$password,$ou,$suffix){
$i=0;
while(1){
$binddn = "uid=$username,ou=".$ou[$i].",".$suffix;
@$ldapbind = ldap_bind($ds, $binddn, $password);
if ($ldapbind){
return true;
break;
}else{
if($i==3){
ldap_close($ds);
return false;
break;
}
}
$i++;
}
}
เวลาจะใช้ก็
Code (PHP)
$ou = array("student","staff","unistaff");
$suffix_string = "dc=psu,dc=pn";
if(ldap_login($ds,$USER,$PASSWORD,$ou,$suffix_string)){
echo?สวัสดีครับ?;
}else{
echo?User หรือ Password ผิด?;
}
2. การทำงาน คราวนี้คุณจะทำอะไรก็ได้แล้วแต่คุณนะครับ
แต่ที่ผมจะแนะนำก็มี 4 อย่าง คือ การ เพิ่ม การ ลบ การแก้ไข และการค้นหา User
2.1 การ เพิ่ม User ใช้คำสั่ง ldap_add ครับ ดังตัวอย่าง
Code (PHP)
$info["cn"]=?Mr.Patt Emmawat?;
$info["sn"]=Patt;
$info["ou"]="student";
$info["mail"][email protected]";
$info["objectclass"][0]="top";
$info["objectclass"][1]="person";
$info["objectclass"][2]="inetOrgPerson";
$info["objectclass"][3]="organizationalPerson";
$info["objectclass"][4]="posixAccount";
$info["objectclass"][5]="shadowAccount";
$info["uidNumber"]=1000;// ใน linux คือ uid หรือ หมายเลขประจำตัวของ user
$info["uid"]=?s4145217?;// คือ ส่วนของ User Name
$info["gidNumber"]="1000"; // ใน linux คือ gid หรือ หมายเลขประจำตัวของ group
$info["homeDirectory"]="/home/s4145217;
$info["loginShell"]="/bin/sh";
$pwd=md5(?s4145217?);
info["userPassword"]=$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)]; // Password ของ User
$r=ldap_add($ds, "uid=s4145217,ou=student,dc=oasitzone,dc=pn", $info);
2.2 การค้นหา User ที่ต้องพุดก่อน เพราะว่า มันใช้การ ลบ และแก้ไข User ด้วยครับ (อำนวยความสะดวก เพราะ ผมเองก็ไม่จำหรอกครับ ว่า มี Ou กะ DN อะไรบ้าง จำแต่ว่ามี User อะไรบ้างก็พอ)
การ เพิ่ม การลบ การแก้ไข User เวลาใช้ ldap_bind ต้องใช้ User พิเศษ ครับ ให้ดูใช้ /slapd.conf
ส่วนของ rootdn และ rootpw
แต่การ ค้นหา ให้ใช้ แค่ dn ก็พอครับ (user+ou+suffix)
Code (PHP)
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=".$login."",$justthese);
$info = ldap_get_entries($ds, $sr);
print_r($info[0])
การค้นหาแบบนี้จะเป็นการดึงข้อมูลของ User ทั้งหมดมา ถ้าเราต้องการแบ่งบางส่วนให้แก้ไขดังนี้
Code (PHP)
$justthese = array("dn","cn","uid"); //ต้องการอะไรก็ใส่เข้าไป
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217",$justthese);
$info1 = ldap_get_entries($ds, $sr);
print_r($info[0])
2.3 การลบ User
Code (PHP)
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217");
$info = ldap_get_entries($ds, $sr);
$r=ldap_delete($ds,$info1[0]["dn"]);
2.4 การแก้ไข User
Code (PHP)
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid="s4145217"?);
$info1 = ldap_get_entries($ds, $sr);
$info["userPassword"]=$_POST['userPassword'];
ldap_modify($ds, $info1[0]["dn"], $info);
3. ยุติการเชื่อมต่อ ง่ายๆสั้นๆ ldap_close($ds)
Reference : http://gotoknow.org/blog/programming/6365
|