Sunday, September 23, 2012

PHP กับ LDAP พื้นฐาน (พื้นฐานการเขียน PHP เชื่อมต่อ Protocal LDAP)

PHP กับ LDAP พื้นฐาน (พื้นฐานการเขียน PHP เชื่อมต่อ Protocal LDAP)

ตอนแรกต้องทดสอบก่อนว่า Server เราสามารถใช้ LDAP extension ได้ไหม

วิธีทดสอบมี 3 วิธีคือ

1. สร้างแฟ้มสำหรับแสดงรายละเอียดของ php สมมุติชื่อ phpinfo.php

Code (PHP)

1.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)
1.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)

01.alert('สามารถใช้ Function $function ได้');
02. 
03.$function=$_POST["function"];
04.if($function){
05.if(function_exists($function)){
06.echo"Funtion นี้ใช้ได้";
07.}else{
08.echo"Funtion นี้ใช้ไม่ได้";
09.}
10.}



คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ไม่ได้ ก็ต้องคอมไพล์ php กันใหม่ครับ ให้ใช้ ?with-ldap ด้วยนะครับ

คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ได้

ขั้นตอนมันก็ไม่มีอะไรมาก

จะสามารถแบ่งได้ 3 ขั้นตอนคือ (อันนี้ผมแบ่งเองนะครับ)

1. ติดต่อกับ LDAP Server

ตอนแรกก็ติดต่อกับ LDAP Server ก่อนนะครับ

Code (PHP)
1.$ds=ldap_connect(?localhost?,?389?)


ตรง localhost ให้เปลี่ยนเป็น ip หรือชื่อเครื่อง Server ถ้า LAP Server เป็นเครื่องอื่น และ port ปกติ

ของ LDAP คือ 389 ครับ ตรงนี้ไม่ต้องใสก็ได้ ก็เป็น

Code (PHP)
1.ldap_connect(?localhost?)


หลังจากติดต่อได้แล้วก็ต้องแสดงว่าใครคือผู้ติดต่อโดยใช้คำสั่งนี้ครับ

ldapbind = ldap_bind($ds, $binddn, $password);

ส่วนนี้อาจจะพูดได้ว่าเป็นการ Login หรือการ ตรวจสอบการ Login ก็ได้ครับ ซึ่งผมเองได้เขียน

Function สำหรับการตรวจสอบ Login ดังตัวอย่างครับ

Code (PHP)
01.function ldap_login($ds,$username,$password,$ou,$suffix){
02.$i=0;
03.while(1){
04.$binddn = "uid=$username,ou=".$ou[$i].",".$suffix;
05.@$ldapbind = ldap_bind($ds, $binddn, $password);
06.if ($ldapbind){
07.return true;
08.break;
09.}else{
10.if($i==3){
11.ldap_close($ds);
12.return false;
13.break;
14.}
15.}
16.$i++;
17.}
18.}


เวลาจะใช้ก็

Code (PHP)
1.$ou = array("student","staff","unistaff");
2.$suffix_string = "dc=psu,dc=pn";
3.if(ldap_login($ds,$USER,$PASSWORD,$ou,$suffix_string)){
4.echo?สวัสดีครับ?;
5.}else{
6.echo?User หรือ Password ผิด?;
7.}


2. การทำงาน คราวนี้คุณจะทำอะไรก็ได้แล้วแต่คุณนะครับ

แต่ที่ผมจะแนะนำก็มี 4 อย่าง คือ การ เพิ่ม การ ลบ การแก้ไข และการค้นหา User

2.1 การ เพิ่ม User ใช้คำสั่ง ldap_add ครับ ดังตัวอย่าง

Code (PHP)
01.$info["cn"]=?Mr.Patt Emmawat?;
02.$info["sn"]=Patt;
03.$info["ou"]="student";
04.$info["mail"]=s4145217@remove.mor-or.pn.psu.ac.th";
05.$info["objectclass"][0]="top";
06.$info["objectclass"][1]="person";
07.$info["objectclass"][2]="inetOrgPerson";
08.$info["objectclass"][3]="organizationalPerson";
09.$info["objectclass"][4]="posixAccount";
10.$info["objectclass"][5]="shadowAccount";
11.$info["uidNumber"]=1000;// ใน linux คือ uid หรือ หมายเลขประจำตัวของ user
12.$info["uid"]=?s4145217?;// คือ ส่วนของ User Name
13.$info["gidNumber"]="1000"; // ใน linux คือ gid หรือ หมายเลขประจำตัวของ group
14.$info["homeDirectory"]="/home/s4145217;
15.$info["loginShell"]="/bin/sh";
16.$pwd=md5(?s4145217?);
17.info["userPassword"]=$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)];// Password ของ User
18.$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)
1.$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=".$login."",$justthese);
2.$info = ldap_get_entries($ds, $sr);
3.print_r($info[0])
การค้นหาแบบนี้จะเป็นการดึงข้อมูลของ User ทั้งหมดมา ถ้าเราต้องการแบ่งบางส่วนให้แก้ไขดังนี้

Code (PHP)
1.$justthese = array("dn","cn","uid"); //ต้องการอะไรก็ใส่เข้าไป
2.$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217",$justthese);
3.$info1 = ldap_get_entries($ds, $sr);
4.print_r($info[0])
2.3 การลบ User

Code (PHP)
1.$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217");
2.$info = ldap_get_entries($ds, $sr);
3.$r=ldap_delete($ds,$info1[0]["dn"]);
2.4 การแก้ไข User

Code (PHP)
1.$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid="s4145217"?);
2.$info1 = ldap_get_entries($ds, $sr);
3.$info["userPassword"]=$_POST['userPassword'];
4.ldap_modify($ds, $info1[0]["dn"], $info);
3. ยุติการเชื่อมต่อ ง่ายๆสั้นๆ ldap_close($ds)

อ้างอิง  http://www.thaicreate.com/community/ldap2.html

No comments:

Post a Comment