ldap_get_attributes

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_get_attributesObtém atributos de uma entrada de resultado de pesquisa

Descrição

ldap_get_attributes(LDAP\Connection $ldap, LDAP\ResultEntry $entry): array

Lê atributos e valores de uma entrada no resultado da pesquisa.

Ao localizar uma entrada específica no diretório, pode-se consultar que informação está armazenana nessa entrada usando-se esta chamada. Pode-se usar esta função para uma aplicação que navega por entradas de diretório e/ou onde não se conhece a estrutura das entradas do diretório. Em muitas aplicações, é comum procurar um atributo específico como um e-mail ou um sobrenome, desconsiderando outros dados da entrada.

return_value["count"] = número da atributos na entrada
return_value[0] = primeiro atributo
return_value[n] = (n+1)-ésimo atributo

return_value["attribute"]["count"] = número de valores para o atributo
return_value["attribute"][0] = primeiro valor do atributo
return_value["attribute"][i] = (i+1)-ésimo valor do atributo

Parâmetros

ldap

Uma instância de LDAP\Connection, retornada por ldap_connect().

entry

Uma instância de LDAP\ResultEntry.

Valor Retornado

Retorna informação completa da entrada em um array multi-dimensional.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro ldap agora espera uma instância de LDAP\Connection; anteriormente, um resource ldap link válido era esperado.
8.1.0 O parâmetro entry agora espera uma instância de LDAP\ResultEntry; anteriormente, um resource ldap result entry válido era esperado.

Exemplos

Exemplo #1 Mostra a lista de atributos armazenados em uma entrada particular do diretório

<?php
// $ds é uma instância válida de LDAP\Connection para um servidor de diretório

// $sr é um resultado de pesquisa válido de uma chamada anterior a
// uma das funções de pesquisa de diretório LDAP

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

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

echo
$attrs["count"] . " atributos mantidos para esta entrada:<p>";

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

Veja Também

add a note

User Contributed Notes 6 notes

up
4
kop at meme dot com
20 years ago
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.)
up
1
allie at pajunas dot com
22 years ago
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".
up
0
software at inebria dot com
22 years ago
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.
up
-2
php dot net at hiddemann dot org
19 years ago
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".
up
-1
Snezko Snezak
17 years ago
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";
}
}
}
up
-2
dunc at rumbletum dot org
16 years ago
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;
}
To Top