2013-07-19 54 views
14

Tôi gặp sự cố với kết nối ldap.Lỗi hoạt động LDAP

$hostname="ldap://sub.domain.com"; 
$ds=ldap_connect($hostname, 389); 
ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals'); 
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 

if ($ds) 
{ 
$dn = "OU=Users,OU=ro,DC=sub,DC=domain,DC=com"; 

if (!($ldapc=ldap_bind($ds))) { 
    echo "<p>Error:" . ldap_error($ds) . "</p>"; 
    echo "<p>Error number:" . ldap_errno($ds) . "</p>"; 
    echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>"; 
    die; 
} 

$attributes = array("sn"); 
$filter = "(sn=*)"; 
$result = ldap_search($ds, $dn, $filter, $attributes); 

echo $result; 
$info = ldap_get_entries($ds, $result); 
for ($i=0; $i < $info["count"]; $i++) { 
    echo $info[$i]["ou"][0]; 
} 
} else { 
    echo "<h4>Unable to connect to LDAP server</h4>"; 
} 

ldap_unbind($ds); 

Kết nối ẩn danh ldap bất kỳ hoạt động vì tôi thử nghiệm trong trình duyệt AD và mọi thứ đều ổn. Trong mã này nó dừng lại ở

ldap_search($ds, $dn, $filter, $attributes); 

tôi nhận được cảnh báo:

Cảnh báo: ldap_search(): Tìm kiếm: lỗi điều hành trong .. \ index.php on line 38

Tôi thực sự không biết nguyên nhân của lỗi này là gì, tôi đánh giá cao sự giúp đỡ của bạn.

+1

Không bạn bị lạc với phạm vi biến? $ dn (cơ sở dn cho tìm kiếm) được định nghĩa một cấp dưới lệnh gọi ldap_search. Thử tham số tìm kiếm lặp lại (var_dump) ldap ngay trước khi gọi tìm kiếm, để đảm bảo mọi thứ đều ổn, hoặc bao gồm kiểm tra isset ($ dn). Hoặc chỉ cần xác định $ dn vô điều kiện. –

+0

Các thông số là ok, tôi đã kiểm tra chúng ngay trước khi cuộc gọi tìm kiếm và điều đó là ok. Một vấn đề mà tôi nghĩ rằng có thể, tôi đang trên mạng nội bộ, tôi không có quyền quản trị viên, vì vậy tôi không thể viết bằng C. Tôi đã sao chép kho lưu trữ xampp, tôi không cài đặt xampp trên máy này. Đầu tiên ngay cả khi tôi kích hoạt phần mở rộng ldap từ php.ini nó không hoạt động vì tôi không có một số tập tin trong C/windows/system. Khi tôi sao chép tất cả mọi thứ hoạt động, tôi nghĩ. Vì vậy, việc cài đặt có thể là một vấn đề? –

+0

Điều gì về việc sử dụng công cụ trình bao để kiểm tra, hoặc Apache DirectoryStudio (giao diện máy khách LDAP)? Bạn không cần phải là quản trị viên địa phương để cài đặt/sử dụng nó, trên Linux hoặc Windows, bất cứ điều gì. Thử kết nối và truy vấn máy chủ ldap với bất kỳ công cụ nào khác ngoài PHP. –

Trả lời

16

Để có được nó ra khỏi danh sách được trả lời:


tôi thấy vấn đề, là vấn đề ràng buộc. Máy chủ chấp nhận liên kết ẩn danh nhưng không chấp nhận tìm kiếm. Và với một người sử dụng và vượt qua làm việc nhưng tôi đã làm cho một sai lầm. Đối với người dùng, tôi chỉ coi tên người dùng của cửa sổ de không phải là tất cả vị trí từ AD, giờ nó hoạt động.

+0

Chính xác cùng một vấn đề đối với tôi.Không có lỗi nào khi liên kết ẩn danh nhưng sau đó "Cảnh báo: ldap_search(): Tìm kiếm: Lỗi hoạt động trong .." khi tìm kiếm. Cung cấp một người dùng AD/pass hợp lệ trên bind cố định tìm kiếm. $ ldapbind = @ldap_bind ($ ldapconn, $ ldaprdn, $ password); – RobDigital

7

Đã xảy ra sự cố này nhưng tôi đã liên kết chính xác với người dùng được phép tìm kiếm.

Tôi giải quyết nó bằng cách thiết lập tùy chọn này để làm việc với thư mục hoạt động:

ldap_set_option($connection, LDAP_OPT_REFERRALS, 0); 
+0

Điều này dường như cũng giúp tôi: 'ldap_set_option ($ connection, LDAP_OPT_PROTOCOL_VERSION, 3);' – bgStack15