|
ldap_get_attributes
Get attributes from a search result entry
(PHP 4, PHP 5)
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 Parameters
Return Values
Returns a complete entry information in a multi-dimensional array
on success and ExamplesExample 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 |