ldap_get_attributes
(PHP 4, PHP 5, PHP 7)
ldap_get_attributes — Получает атрибуты из записи в результатах поиска
Описание
$link_identifier
, resource $result_entry_identifier
)Читает атрибуты и значения из записи в результатах поиска.
Определив местоположение определенной записи в каталоге, вы можете узнать, какая информация хранится для этой записи используя эту функцию. Вы должны использовать эту функцию для приложения, которое "просматривает" записи каталога и/или где структура записей каталога неизвестна. Во многих приложениях вы будете искать определенный атрибут, такой как адрес электронной почты или фамилия, не затрагивая другие данные.
return_value["count"] = число атрибутов в записи return_value[0] = первый атрибут return_value[n] = n-ый атрибут return_value["attribute"]["count"] = число значений атрибута return_value["attribute"][0] = первое значение атрибута return_value["attribute"][i] = (i+1)-ое значение атрибута
Список параметров
-
link_identifier
-
Идентификатор ссылки LDAP, возвращенный ldap_connect().
-
result_entry_identifier
-
Возвращаемые значения
Возвращает полную информацию записи в многомерный массив в случае успеха
и FALSE
в случае ошибки.
Примеры
Пример #1 Показывает список атрибутов, соответствующие определенной записи директории
<?php
// $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() - Получить следующий атрибут из результата
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие службы
- Облегчённый протокол доступа к каталогам (LDAP)
- ldap_8859_to_t61
- ldap_add
- ldap_bind
- ldap_close
- ldap_compare
- ldap_connect
- ldap_control_paged_result_response
- ldap_control_paged_result
- ldap_count_entries
- ldap_delete
- ldap_dn2ufn
- ldap_err2str
- ldap_errno
- ldap_error
- ldap_escape
- ldap_explode_dn
- ldap_first_attribute
- ldap_first_entry
- ldap_first_reference
- ldap_free_result
- ldap_get_attributes
- ldap_get_dn
- ldap_get_entries
- ldap_get_option
- ldap_get_values_len
- ldap_get_values
- ldap_list
- ldap_mod_add
- ldap_mod_del
- ldap_mod_replace
- ldap_modify_batch
- ldap_modify
- ldap_next_attribute
- ldap_next_entry
- ldap_next_reference
- ldap_parse_reference
- ldap_parse_result
- ldap_read
- ldap_rename
- ldap_sasl_bind
- ldap_search
- ldap_set_option
- ldap_set_rebind_proc
- ldap_sort
- ldap_start_tls
- ldap_t61_to_8859
- ldap_unbind
Коментарии
As of PHP 4.0.5, the ldap_get_attributes function does not work with binary data. If you're fetching a JPEG from an LDAP server, use ldap_get_values_len instead.
The array created by this function is similar to the on from ldap_get_entries() but when it creates array keys it alters the attribute's case inconsistently.
ldap_get_entries() lowercases all of the attributes before keying the array with them, but this function appears to leave things as they are.
If you're having problems, do a print_r and make sure you're using correct case for array keys. For example, you might need to use "objectClass" and not "objectclass".
It's good practice to use array_change_key_case() on the result of ldap_get_attributes() so your program can ignore case in attribute names just like ldap itself does. (You wouldn't want ldap_get_attributes to _always_ flatten the case because you need a way to get the attribute names in a pretty format for display to the user.)
Note that ldap_get_attributes fetches attributes AND values from the LDAP server. Depending on the data stored in the entry, the following code might work a dozen times faster (or even better, but faster in general) than the code in Example 1:
<?php
// $ds is the link identifier for the directory
// $sr is a valid search result from a prior call to
// one of the ldap directory search calls
$entry = ldap_first_entry($ds, $sr);
$attrs = array();
$attribute = ldap_first_attribute($ds,$entry,$identifier);
while ($attribute) {
$attrs[] = $attribute;
$attribute=ldap_next_attribute($ds,$entry,$identifier);
}
echo count($attrs) . " attributes held for this entry:<p>";
for ($i=0; $i<count($attrs); $i++) {
echo $attrs[$i] . "<br />";
}
?>
You may want to check the time difference with the function "microtime".
Code and function to extract all attributes from all entryes in a certain DN. Maybe not the most timewise efficient but it works.
$entry = ldap_first_entry($ds, $sr);
write_attr($entry,$ds);
for ($i = 0; $i < $n_entries; $i++){
$entry = ldap_next_entry($ds, $entry);
write_attr($entry,$ds);
}
function write_attr($entry,$ds){
$attrs = ldap_get_attributes ($ds, $entry);
for ($j = 0; $j < $attrs["count"]; $j++){
$attr_name = $attrs[$j];
$attrs["$attr_name"]["count"] . "\n";
for ($k = 0; $k < $attrs["$attr_name"]["count"]; $k++) {
echo ">>>>>>";
echo $attr_name.": ".$attrs["$attr_name"][$k]."\n";
}
}
}
I spent quite a while scratching my head about how to read operational attributes such as create and modify timestamps.
This function solved it....
function get_entry_system_attrs( $ds, $dn, $deref=LDAP_DEREF_NEVER )
{
$conn = $ds;
$attrs = array( 'creatorsname', 'createtimestamp', 'modifiersname',
'structuralObjectClass', 'entryUUID', 'modifytimestamp',
'subschemaSubentry', 'hasSubordinates', '+' );
$search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, $deref );
if( ! $search )
return false;
$entry = ldap_first_entry( $conn, $search );
if( ! $entry)
return false;
$attrs = ldap_get_attributes( $conn, $entry );
if( ! $attrs )
return false;
if( ! isset( $attrs['count'] ) )
return false;
$count = $attrs['count'];
unset( $attrs['count'] );
$return_attrs = array();
for( $i=0; $i<$count; $i++ ) {
$attr_name = $attrs[$i];
unset( $attrs[$attr_name]['count'] );
$return_attrs[$attr_name] = $attrs[$attr_name];
}
return $return_attrs;
}