|
ldap_get_attributes
Get attributes from a search result entry
(PHP 4, PHP 5)
Example 1118. Show the list of attributes held for a particular directory entry<?php Code Examples / Notes » ldap_get_attributesallie
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 Languageldap_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 |