Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : LDAP Functions : ldap_get_attributes

ldap_get_attributes

Get attributes from a search result entry (PHP 4, PHP 5)
array ldap_get_attributes ( resource link_identifier, resource result_entry_identifier )

Reads attributes and values from an entry in the search result.

Having located a specific entry in the directory, you can find out what information is held for that entry by using this call. You would use this call for an application which "browses" directory entries and/or where you do not know the structure of the directory entries. In many applications you will be searching for a specific attribute such as an email address or a surname, and won't care what other data is held.

return_value["count"] = number of attributes in the entry
return_value[0] = first attribute
return_value[n] = nth attribute

return_value["attribute"]["count"] = number of values for attribute
return_value["attribute"][0] = first value of the attribute
return_value["attribute"][i] = (i+1)th value of the attribute

Parameters

link_identifier

An LDAP link identifier, returned by ldap_connect().

result_entry_identifier

Return Values

Returns a complete entry information in a multi-dimensional array on success and FALSE on error.

Examples

Example 1118.  Show the list of attributes held for a particular directory entry

<?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 = ldap_get_attributes($ds, $entry);

echo
$attrs["count"] . " attributes held for this entry:<p>";

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


Code Examples / Notes » ldap_get_attributes

allie

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".


php dot net

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:

";
for ($i=0; $i<count($attrs); $i++) {
  echo $attrs[$i] . "<br />";
}
?>
You may want to check the time difference with the function "microtime".


kop

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.)

dunc

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;
}


snezko snezak

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";
     }
  }
}


software

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.

Change Language


Follow Navioo On Twitter
ldap_8859_to_t61
ldap_add
ldap_bind
ldap_close
ldap_compare
ldap_connect
ldap_count_entries
ldap_delete
ldap_dn2ufn
ldap_err2str
ldap_errno
ldap_error
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
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
eXTReMe Tracker