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 )

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