ГоловнаКаталогБлогРейтингЕ-Пошта 
 
 
Зробити домашньою у вибране  

  Функції LDAP  
Зміст
ldap_add
ldap_bind
ldap_close
ldap_connect
ldap_count_entries
ldap_delete
ldap_dn2ufn
ldap_explode_dn
ldap_first_attribute
ldap_first_entry
ldap_free_result
ldap_get_attributes
ldap_get_dn
ldap_get_entries
ldap_get_values
ldap_list
ldap_modify
ldap_next_attribute
ldap_next_entry
ldap_read
ldap_search
ldap_unbind

Введення в LDAP
LDAP (Lightweight Directory Access Protocol) - Протокол Доступу до Директорій (каталогам), є протоколом, використовуваним для доступу до "Серверів Каталогів". Директорія являється спеціальним різновидом бази даних, яка зберігає інформацію використовуючи деревовидну структуру.
Ця концепція аналогічна структурі каталога на вашому жорсткому диску, за винятком того що в даному контексті кореневий каталог розглядається як "весь світ" а підкаталоги першого рівня як "країни". Більш нижчі рівні структури директорії містять вхід для компаній, організацій або місць, на рівні ще нижче знаходяться входи каталога для людей і можливо для устаткування або документів.
Для посилання на файл в підкаталозі на жорсткому диску використовується щось подібне
/usr/local/myapp/docs
Похила пряма відзначає кожен розділ в посиланні, а вся послідовність символів посилання читається зліва направо.
Еквівалентом повністю визначеного посилання в LDAP є "Distinguished name" (розрізнювальне ім'я), що позначається як "dn". Прикладом dn може бути:
cn=John Smith,ou=Accounts,o=My Company,c=US
Кожен розділ такого посилання виділяється комою, а вся послідовність читається справа наліво. Посилання читається як ..
country = US
organization = My Company
organizationalUnit = Accounts
commonName = John Smith
Так само, як і при організації структури каталогу на жорсткому диску, в даному способі немає жорстких правил щодо організації структури, і менеджер сервера директорії LDAP допускає будь-яку структуру, відповідну для вибраної мети. Проте є ряд угод. Суть їх в тому, що ви не можете написати код доступу до сервера директорії, не знаючи його структури, так само як ви не можете використовувати базу даних без уявлення про її призначення.
Приклад повної програми
Пошук інформації для всіх записів, де прізвище починається на "S", в сервері директорії, показує на дисплеї та вибирає ім'я і email-адресою.

Приклад 1. Приклад пошуку в LDAP

<?php
// базова послідовність в LDAP це з'єднання, зв'язок
// пошук, інтерпретація пошуку, результат, закриття з'єднання

echo "<h3>LDAP тест запроса</h3>";
echo "З'єднання ...";
$ds=ldap_connect("localhost"); // повинен існувати LDAP-сервер!
echo "результат з'єднання ".$ds."<p>";

if ($ds) {
echo "Встановлення зв'язку ...";
$r=ldap_bind($ds); // це "anonymous" зв'язок, зазвичай доступ
// тільки для читання, виведення "Результат зв'язку.."
echo "Результат зв'язку ".$r."<p>";

echo "Пошук для (sn=S*) ...";
// Пошук запису з прізвищем
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Результат пошуку ".$sr."<p>";

echo "Кількість повернених записів ".ldap_count_entries($ds,$sr)."<p>";

echo "Отримання записів ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Дані для ".$info["count"]." об'єктів повернені:<p>";

for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: ". $info[$i]["dn"] ."<br>";
echo "перший запис cn: ". $info[$i]["cn"][0] ."<br>";
echo "перший запис email: ". $info[$i]["mail"][0] ."<p>";
}

echo "Закриття з'єднання";
ldap_close($ds);

} else {
echo "<h4>Немає з'єднання з LDAP сервером</h4>";
}
?>

Використання PHP LDAP викликів
Вам потрібно буде встановити і скопіювати бібліотеки LDAP-клієнта з пакету University of Michigan ldap-3.3, або з Netscape Directory SDK. Вам також потрібно буде перекомпілювати PHP з підтримкою LDAP для того, щоб застосування PHP LDAP викликів стало доступним.
Перш ніж використовувати LDAP виклики, необхідно знати ..
• Ім'я або адреса сервера директорії, який ви використовуватимете
• "Базовий dn" сервера (частина "світового" каталогу на даному сервері, яка може бути "o=My Company,c=US")
• Чи потрібний пароль для доступу до даного сервера (багато серверів забезпечують доступ для читання для "anonymous зв'язків", але вимагають пароля для чого-небудь ще)
Типова послідовність LDAP-викликів, яку ви можете застосовувати в додатках, представлена в наступному шаблоні:
ldap_connect() // установка з'єднання з сервером
|
ldap_bind() // анонімний або такий, що ідентифікується "вхід"
|
дії подібні до пошуку або оновлення каталогу
з виведенням результату
|
ldap_close() // "вихід"
Додаткова інформація
Велика кількість інформації по LDAP може бути знайдена:
• Netscape
• University of Michigan
• OpenLDAP Project
• LDAP World
Netscape SDK отримає корисне керівництво Програміста в .html форматі.


ldap_add

ldap_add – додає записи в LDAP каталог

Опис

int ldap_add(цілочисельний link_identifier, рядкове dn, масив запису);

повертає true при успіху і false при помилці.
Функція
ldap_add() використовується для додання записів в LDAP каталог. DN, що додається, виражається за допомогою dn. Масив запису визначає інформацію про запис. Значення записів індексуються за допомогою індивідуальних атрибутів. У разі багаторазових значень для атрибуту, вони індексуються цілими числами починаючи з 0.
запис["атрибут1"] = значення
запис["атрибут2"][0] = значення1
запис["атрибут2"][1] = значення2

Приклад 1. Повний приклад із зв'язком, що ідентифікується

<?php
$ds=ldap_connect("localhost"); // перевірка наявності LDAP сервера на хосте

if ($ds) {
// зв'язок з відповідним dn для отримання оновленого доступу
$r=ldap_bind($ds,"cn=root, o=My Company, c=US", "secret");

// підготовка даних
$info["cn"]="John Jones";
$info["sn"]="Jones";
$info["mail"]="jonj@here.and.now";
$info["objectclass"]="person";

// додання даних в каталог
$r=ldap_add($ds, "cn=John Jones, o=My Company, c=US" $info);

ldap_close($ds);
} else {
echo "Немає з'єднання з LDAP сервером";
}
?>


ldap_bind

ldap_bind – зв'язок з LDAP каталогом

Опис

int ldap_bind(ціле link_identifier, рядкове bind_rdn, рядкове bind_password);
Зв'язок з LDAP каталогом з певним RDN і паролем. Повертає true при успіху і false при помилці.
ldap_bind() здійснює операцію зв'язку з каталогом. bind_rdn і bind_password використовуються факультативно. Якщо не визначено, застосовується зв'язок anonymous.


ldap_close

ldap_close – закриває зв'язок з LDAP сервером

Опис

int ldap_close(ціле link_identifier);

Повертає true при успіху, false при помилці.
ldap_close() закриває зв'язок з LDAP сервером, яка асоціювалася з певним link_identifier.
Цей виклик внутрішньо ідентичний ldap_unbind(). LDAP API використовує виклик ldap_unbind(), тому можливо він переважніше виклику ldap_close().


ldap_connect

ldap_connect – з'єднання з LDAP сервером

Опис

int ldap_connect(рядкове hostname, ціле port);

Повертає позитивний LDAP ідентифікатор зв'язку при успіху, false при помилці.
ldap_connect() встановлює з'єднання з LDAP сервером по певних hostname і port. Обидва аргументи факультативні. Якщо аргументи не визначені, то буде повернений идентефикатор вже відкритого з'єднання. Якщо визначено тільки hostname, то замовчанню використовується порт 389.


ldap_count_entries

ldap_count_entries – підрахунок кількості записів при пошуку

Опис

int ldap_count_entries(ціле link_identifier, ціле result_identifier);

Повертає кількість записів в результаті або false при помилці.
ldap_count_entries() повертає кількість записів, що зберігаються в результаті від попередньої операції пошуку. result_identifier ідентифікує внутрішній ldap результат.


ldap_delete

ldap_delete - видаляє запис з каталога

Опис

int ldap_delete(ціле link_identifier, рядкове dn);

Повертає true при успіху і false при помилці.
ldap_delete() видаляє окремий запис з LDAP каталога, визначену по dn.


ldap_dn2ufn

ldap_dn2ufn – конвертує DN в User Friendly Naming формат

Опис

string ldap_dn2ufn(рядкове dn);

ldap_dn2ufn() перетворює DN в більш дружню для користувача форму, видаляючи імена типу.


ldap_explode_dn

ldap_explode_dn – розбиває DN на складові частини

Опис

array ldap_explode_dn(рядкове dn, ціле with_attrib);

ldap_explode_dn() розбиває DN, що повертається по ldap_get_dn() на складові частини. Кожна частина відома як Relative Distinguished Name, або RDN. ldap_explode_dn() повертає масив всіх компонентів. with_attrib використовується для запиту, чи повертати RDN тільки із значеннями або з їх атрибутами. Щоб отримати RDN-частини з атрибутами ( у форматі атрибут = значення) встановіть with_attrib в 1, щоб получити тільки значень та встановіть його в 0.


ldap_first_attribute

ldap_first_attribute – повертає перший атрибут

Опис

string ldap_first_attribute(ціле link_identifier, ціле result_entry_identifier, ціле ber_identifier);

Повертає перший атрибут в записі при успіху і false при помилці.
Подібно до читання записів, атрибути також читаються один за іншим з окремого запису.
ldap_first_attribute() повертає перший атрибут в записі, відміченому ідентифікатором записі. Атрибути, що залишилися, шукаються послідовними викликами ldap_next_attribute(). ber_identifier є ідентифікатором покажчика положення внутрішньої пам'яті. Він передається по посиланню. Аналогічний ber_identifier передається ldap_next_attribute() функцією, яка змінює цей покажчик.

Див. також ldap_get_attributes()


ldap_first_entry

ldap_first_entry – повертає перший ідентифікатор (id) результату

Опис

int ldap_first_entry(ціле link_identifier, ціле result_identifier);

Повертає ідентифікатор запису для першого запису результату при успіху і false при помилці.
Записи в LDAP-результаті читаються послідовно з використанням функцій
ldap_first_entry() і ldap_next_entry(). ldap_first_entry() повертає ідентифікатор запису для першого запису в результаті. Цей ідентифікатор запису передається потім в процедуру lap_next_entry() для отримання послідовних записів з результату.

Див. також ldap_get_entries().


ldap_free_result

ldap_free_result – звільняє пам'ять результату

Опис

int ldap_free_result(ціле result_identifier);

Повертає true при успіху і false при помилці.
ldap_free_result() звільняє внутрішню пам'ять, що призначена для зберігання результату і відзначається за допомогою result_identifier. Вся пам'ять результату автоматично звільняється коли скрипт завершується.

Зазвичай вся пам'ять, що виділяється для ldap результату звільняється при закінченні скрипта. У разі, коли скрипт виконує послідовні пошуки, які повертають великі набори записів в результаті, ldap_free_result() може бути викликана для збереження працездатності оперативної пам'яті для наступної частини скрипта.


ldap_get_attributes

ldap_get_attributes – отримує атрибути запису в результаті пошуку

Опис

array ldap_get_attributes(ціле link_identifier, ціле result_entry_identifier);

Повертає повну інформацію про запис в багаторозмірному масиві при успіху і false при помилці.
ldap_get_attributes() використовується для спрощення читання атрибутів і значень із запису в результаті пошуку. Значенням функції, що повертається, є багаторозмірний масив атрибутів і значень.
Розмістивши певний запис в каталозі, ви можете дізнатися яка інформація зберігається для цього запису, використовуючи даний виклик. Ви могли б використовувати цей виклик в додатку яке "проглядає" каталог записів, або коли вам не відома структура каталогу записів. У багатьох додатках ви можете шукати певні атрибути, такі як email-адреса або прізвище, не задумуючись при цьому вмістом інших даних.
return_value["count"] = кількість атрибутів в записі
return_value[0] = перший атрибут
return_value[n] = n-й атрибут

return_value["attribute"]["count"] = кількість значень атрибуту
return_value["attribute"][0] = перше значення атрибуту
return_value["attribute"][i] = i-те значення атрибуту

Приклад 1. Показує список атрибутів окремого запису каталогу

// $ds є ідентифікатором зв'язку для каталогу

// $sr допустимий результат пошуку від попереднього виклику до
// поточному при викликах пошуку по ldap каталогу

$entry = ldap_first_entry($ds, $sr);

$attrs = ldap_get_attributes($ds, $entry);

echo $attrs["count"]." атрибути для даного запису:<p>";

for ($i=0; $i<$attrs["count"]; $i++)
echo $attrs[$i]."<br>";

Див. також ldap_first_attribute() та ldap_next_attribute()


ldap_get_dn

ldap_get_dn – отримує DN запису результату

Опис

string ldap_get_dn(ціле link_identifier, ціле result_entry_identifier);

Повертає DN запис результату при успіху або false при помилці.
ldap_get_dn() використовується для знаходження DN запису в результаті.


ldap_get_entries

ldap_get_entries – отримує всі записи результату

Опис

array ldap_get_entries(ціле link_identifier, ціле result_identifier);

Повертає повну інформацію про результат в багатовимірному масиві при успіху і false при помилці.
ldap_get_entries() використовується для спрощення читання безлічі записів з результату і потім читання атрибутів і багатьох значень. Інформація про запис повертається по одиночному виклику функції в багатовимірному масиві. Структура масиву представлена нижче.
Індекс атрибуту перетвориться до нижнього регістра. (Атрибути серверів каталогів нечутливі до регістра, але не в тому разі коли вони використовуються як індекси масиву).
return_value["count"] = кількість записів в результаті
return_value[0] : посилається на деталі першого запису

return_value[i]["dn"] = DN i-тої записі в результаті

return_value[i]["count"] = кількість атрибутів i-того запису
return_value[i][j] = j-тый атрибут i-того запису результату

return_value[i]["attribute"]["count"] = кількість значень атрибуту в i-тій записі
return_value[i]["attribute"][j] = j-те значення атрибуту в i-тій записі

Див. також ldap_first_entry() та ldap_next_entry()


ldap_get_values

ldap_get_values – отримання всіх значень із запису результату

Опис

array ldap_get_values(ціле link_identifier, ціле result_entry_identifier, рядкове attribute);

Повертає масив значень атрибуту при успіху і false при помилці.
ldap_get_values() використовується для читання всіх значень атрибуту в записі даного результату. Запис визначається по result_entry_identifier. Кількість значень може бути отримана при індексації "лічильника" в результуючому масиві. Окремі значення доступні по цілочисельному індексу в масиві. Перший індекс починається з 0.
Для даного виклику необхідний result_entry_identifier, тому потрібно заздалегідь зробити один виклик ldap пошуку, і один з виклик для отримання окремого запису.
Ваш додаток або може бути жорстко налаштовано на пошук певних атрибутів (таких як "прізвище" або "пошта") або ви повинні використовувати виклик ldap_get_attributes() для отримання інформації про те, які атрибути існують для даного запису.
У LDAP може бути більше одного запису для атрибуту, тому можна, наприклад, зберігати декілька адрес email в записі каталогу для однієї персони, при цьому всі записи будуть відмічені з атрибутом "mail"
return_value["count"] = кількість значень для атрибуту
return_value[0] = перше значення атрибуту
return_value[i] = i-те значення атрибуту
Приклад 1. Список значень атрибуту "mail" для запису каталогу
// $ds допустимий ідентифікатор зв'язку для сервера каталогу

// $sr допустимий результат пошуку від попереднього виклику до
// поточного при викликах пошуку по ldap каталогу

// $entry допустимий ідентифікатор запису від попереднього
// виклику до поточного від викликів тих, що повертають запис каталогу

$values = ldap_get_values($ds, $entry,"mail");

echo $values["count"]." email адреса для даного запису.<p>";

for ($i=0; $i < $values["count"]; $i++)
echo $values[$i]."<br>";


ldap_list

ldap_list – однорівневий пошук

Опис

int ldap_list(ціле link_identifier, рядкове base_dn, рядкове filter);
Повертає ідентифікатор результату пошуку при успіху або false при помилці.
ldap_list() виконує пошук з певним фільтром по каталогу з областю LDAP_SCOPE_ONELEVEL.
LDAP_SCOPE_ONELEVEL означає що такий пошук може повернути тільки інформацію, що знаходиться на рівні безпосередньо нижчого базового dn, заданого у виклику. (Еквівалентно введенню "ls" та отримання списку файлів і папок в поточному робочому каталозі).
Цей виклик бере факультативно четвертий параметр який є масивом необхідних атрибутів. Див. примітка до ldap_search().

Приклад 1. Складання списку всіх підрозділів організації

// $ds допустимий ідентифікатор зв'язку для сервера каталогу

$basedn = "o=My Company, c=US";
$justthese = array("ou");

$sr=ldap_list($ds, $basedn, "ou=*" $justthese);

$info = ldap_get_entries($ds, $sr);

for ($i=0; $i<$info["count"]; $i++)
echo $info[$i]["ou"][0] ;


ldap_modify

ldap_modify – зміна запису LDAP

Опис

int ldap_modify(ціле link_identifier, рядкове dn, масив entry);

Повертає true при успіху і false при помилці.
ldap_modify() використовується для зміни існуючих записів в каталозі LDAP. Структура запису така ж як і в ldap_add().


ldap_next_attribute

ldap_next_attribute – отримує наступний атрибут в результаті

Опис

string ldap_next_attribute(ціле link_identifier, ціле result_entry_identifier, ціле ber_identifier);
Повертає наступний атрибут в записі або false при помилці.
ldap_next_attribute() викликається для пошуку атрибутів в записі. Внутрішнє положення покажчика встановлюється по ber_identifier. Він посилається на дану функцію по посиланню. Перший виклик ldap_next_attribute() здійснюється з result_entry_identifier отримуваним від ldap_first_attribute().

Див. також ldap_get_attributes()


ldap_next_entry

ldap_next_entry – отримує наступний запис в результаті

Опис

int ldap_next_entry(ціле link_identifier, ціле result_entry_identifier);

Повертає ідентифікатор записи для наступного запису в результаті, записи якого починали прочитуватися функцією
ldap_first_entry(). Якщо більше немає записів в результаті, то повертається false.
ldap_next_entry() використовується для пошуку записів, що зберігаються в результаті. Послідовні виклики ldap_next_entry() повертають записи одну за іншою поки не закінчаться всі записи. Перше звернення до ldap_next_entry() здійснюється після виклику ldap_first_entry() з параметром result_identifier, який повертається від ldap_first_entry().

Див. також ldap_get_entries()


ldap_read

ldap_read – читання запису

Опис

int ldap_read(ціле link_identifier, рядок base_dn, рядок filter, масив [attributes]);

Повертає ідентифікатор результату пошуку або false при помилці.
ldap_read() виконує пошук при певному фільтрі по каталогу з областю LDAP_SCOPE_BASE. Таким чином, це еквівалентно читанню запису з каталогу.
Порожній фільтр не допустимий. Якщо ви хочете отримати абсолютно всю інформацію для даного запису, використовуйте фільтр "objectClass=*". Якщо ви знаєте які типи записів використовуються в сервері каталогу, ви можете застосувати відповідний фільтр, такий як "objectClass=inetOrgPerson".
Цей виклик бере факультативно четвертий параметр який є масивом необхідних атрибутів. Див. примітка ldap_search().


ldap_search

ldap_search – пошук по дереву LDAP

Опис

int ldap_search(ціле link_identifier, рядкове base_dn, рядкове filter, масив [attributes]);
Повертає ідентифікатор результату пошуку або false при помилці.
ldap_search() здійснює пошук для певного фільтру по каталогу з областю LDAP_SCOPE_SUBTREE. Це еквівалентно пошуку по всьому каталогу. base_dn визначає базовий DN для даного каталогу.
Є факультативний четвертий параметр, який може бути доданий для обмеження атрибутів і значень тих, що повертаються сервером, якщо це потрібно. Це значно ефективніше чим дія замовчуванню (яке повертає всі атрибути і їх відповідні значення). Використання четвертого параметра може тому розглядатися як хороша практика.
Четвертий параметр є стандартним рядковим масивом PHP з необхідними атрибутами, тобто array ("mail","sn","cn"). Відмітимо, що "dn" потрібний завжди, незалежно від того, які типи атрибутів запрошуються.
Відзначимо також, що деякі хости каталогу сервера можуть бути конфігуровані так, що повертатимуть кількість записів встановлена кількість, що не перевищує заздалегідь. Якщо це відбувається, сервер показуватиме що він повертатиме тільки обмежені набори результатів.
Пошуковий фільтр може бути простим або розширеним, таким, що використовує булеві оператори у форматі описаному в документації LDAP (Див. Netscape Directory SDK для доповнення інформації по фільтрах).
Приведений нижче приклад відшукує the відділ організації, прізвище, дане ім'я і адресу email для всіх людей в "My Company" де прізвище або дане ім'я містять підрядок $person. Цей приклад використовує логічний фільтр для вказівки серверу на пошук інформації більш ніж в одному атрибуті.

Приклад 1. LDAP пошук

// $ds допустимий ідентифікатор зв'язку сервера каталогу

// $person вся частина імені персони, тобто "Jo"

$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array( "ou", "sn", "givenname", "mail");

$sr=ldap_search($ds, $dn, $filter, $justthese);

$info = ldap_get_entries($ds, $sr);

print $info["count"]." записів возвращено<p>";
Коли ви виконуєте пошук, і дуже багато даних повертається (багато записів) ви отримаєте попередження, і ldap_get_entries() видасть збій. Прийом, що розглядається тут, повинен вимкнути це попередження, потім перевірити отриманий запис.
$normerr = error_reporting ();
error_reporting (0); // вимикає попередження!
$sr = ldap_search ($ds, $dn, $searchfor);
$normerr = error_reporting ($normerr);
if (!$sr) print "дуже багато записів!";
else .....

Ви можете спробувати звузити цю область, додавши особливий фільтр, тобто (cn=a*), але було б краще мати можливість захопити результати в бітах ( 1-100, 101-200...).


ldap_unbind

ldap_unbind – припинення зв'язку з каталогом LDAP

Опис

int ldap_unbind(ціле link_identifier);

Повертає true при успіху і false при помилці.
ldap_unbind() припиняє зв'язок з каталога LDAP.




  Логін:
  Пароль:
Книга Фріланс на західному ринку
Книга Фріланс на західному ринку

APServer | SiMan CMS | Лічильник відвідувань | Тека сайтів | Рейтинг | Форум | Download | Шаблони сторінок | Посібник Smarty | Підручник PHP | Статті/Огляди