ConFoo: Call for paper is now Open

ldap_get_attributes

(PHP 4, PHP 5)

ldap_get_attributesObtener atributos de una entrada de búsqueda de resultados

Descripción

array ldap_get_attributes ( resource $link_identifier , resource $result_entry_identifier )

Lee atributos y valores desde una entrada en la búsqueda de resultados.

Teniendo ubicada una entrada específica en el el directorio, puedes encontrar qué información es mantenida para esa entrada utilizando esta llamada. Podrías utilizar esta llamada para una aplicación la cual "navegue" entre entradas de directorio y/o donde no conozcas la estructura de las entradas de directorio. En muchas aplicaciones estarás buscando un atributo específico tal como una dirección de correo electrónico o un apellido, y no tendrás cuidado de qué otro datos sean mantenidos en esa búsqueda.

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

return_value["attribute"]["count"] = número de valores para un atributo
return_value["attribute"][0] = el primero valor del atributo
return_value["attribute"][i] = el valor (i+1) del atributo

Parámetros

link_identifier

Un enlace identificador de LDAP, devuelto por ldap_connect().

result_entry_identifier

Valores devueltos

Devuelve una entrada completa de información en un arreglo multi-dimensional en caso de éxito y FALSE en caso de error.

Ejemplos

Ejemplo #1 Mostrar la lista de atributos mantenida por una entrada de directorio en particular

<?php
// $ds es el enlace identificador para el directorio

// $sr es un resultado de búsqueda válido desde una llamada previa hacia
// una de las llamadas de búsqueda de directorio de ldap

$entry ldap_first_entry($ds$sr);

$attrs ldap_get_attributes($ds$entry);

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

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

Ver también

add a note add a note

User Contributed Notes 6 notes

up
1
Snezko Snezak
8 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
1
kop at meme dot com
11 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
0
php dot net at hiddemann dot org
10 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
0
allie at pajunas dot com
12 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
13 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
dunc at rumbletum dot org
6 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