ldap_get_attributes

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

ldap_get_attributesLee los atributos de una entrada

Descripción

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

Lee los atributos y los valores para una entrada de un resultado de búsqueda.

Una vez que se ha identificado una entrada en un directorio, se pueden obtener más información sobre ella con esta función. Podría ser utilizada en el marco de una aplicación que mapea los directorios y las entradas. En numerosas aplicaciones, se buscan entradas que posean un atributo preciso, sin preocuparse por los otros atributos.

return_value["count"] = número de atributos en la entrada
return_value[0] = primer atributo
return_value[n] = n-ésimo atributo

return_value["attribute"]["count"] = número de valores del atributo
return_value["attribute"][0] = primera valor del atributo
return_value["attribute"][i] = (i+1)-ésimo valor del atributo

Parámetros

ldap

An LDAP\Connection instance, returned by ldap_connect().

entry

An LDAP\ResultEntry instance.

Valores devueltos

Devuelve el detalle de las informaciones de una entrada bajo la forma de un array multidimensional.

Historial de cambios

Versión Descripción
8.1.0 The ldap parameter expects an LDAP\Connection instance now; previously, a valid ldap link recurso was expected.
8.1.0 The entry parameter expects an LDAP\ResultEntry instance now; previously, a valid ldap result entry recurso was expected.

Ejemplos

Ejemplo #1 Muestra la lista de atributos de una entrada

<?php
// $ds debe ser una instancia de conexión LDAP\Connection válida

// $sr es una búsqueda válida, resultante de una operación
// previa

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

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

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

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

Ver también

add a note

User Contributed Notes 6 notes

up
4
kop at meme dot com
21 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
23 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
24 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
-1
php dot net at hiddemann dot org
20 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
18 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
17 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