PHP 8.4.0 RC4 available for testing

ldap_get_values

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_get_values結果エントリから全ての値を得る

説明

ldap_get_values(LDAP\Connection $ldap, LDAP\ResultEntry $entry, string $attribute): array|false

結果内のエントリ属性の、すべての値を読み込みます。

この関数をコールするには、entry が必要です。このため、事前に LDAP の検索用関数のコールと個々の エントリ取得用関数のコールを行っておく必要があります。

アプリケーションでは、("surname" または "mail" のような)特定の属性 を探すためにその属性をコードに埋め込んで置くか、さもなくば、指定した エントリに関して存在する属性を調べるために ldap_get_attributes() をコールする必要があります。

パラメータ

ldap

ldap_connect() が返す LDAP\Connection クラスのインスタンス。

entry

LDAP\ResultEntry クラスのインスタンス。

attribute

戻り値

成功した場合、指定した属性に関する値を配列を返します。エラーの場合は false を返します。値の数を調べるには、結果の配列の "count" という要素を確認します。個々の値にアクセスするには、 整数値のインデックスを指定して配列にアクセスします。 最初のインデックスは 0 となります。

LDAP では、ある属性に関して複数のエントリを持つことが可能です。 このため、たとえば一人の人間のディレクトリエントリに多数の 電子メールアドレスがあったとしても、それらをすべて "mail" という属性で管理することができます。

    return_value["count"] = 属性の値の数
    return_value[0] = 属性の最初の値
    return_value[i] = 属性の i 番目の値
    

変更履歴

バージョン 説明
8.1.0 引数 ldap は、LDAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な ldap link リソース を期待していました。
8.1.0 引数 entry は、 LDAP\ResultEntry クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な ldap result entry リソース を期待していました。

例1 あるディレクトリエントリの全ての "mail" 属性の一覧を表示する

<?php
// $ds はディレクトリサーバーの有効な LDAP\Connection のインスタンス

// $sr は事前の LDAP 検索コールのどれかから返された有効な検索結果

// $entry はディレクトリエントリを返すコールのどれかから返された有効な
// エントリ ID

$values = ldap_get_values($ds, $entry, "mail");

echo
$values["count"] . " email addresses for this entry.<br />";

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

参考

add a note

User Contributed Notes 2 notes

up
2
software at inebria dot com
23 years ago
It wasn't immediately obvious to me that the ldap_get_values function does not work with binary data - only strings. If you fetch binary data with ldap_get_values you don't get a warning - just some trash. For binary data you have to use ldap_get_values_len.
up
1
viper_sb at IGETTOMUCHSPAMhotmail dot com
21 years ago
Well this took me a while to find the problem, so I'm posting in case someone else runs in to this.

$sr = ldap_search($ds, "cn=me", "(objectclass=*)");
$entry = ldap_first_entry($ds, $sr);
do {
// do other stuff
$sr = "something else now";
$values = ldap_get_values($ds, $entry, "attirib1");
// do other stuff
} while ($entry = ldap_next_entry($ds, $entry));

If you change the search resource $sr to something else even though it's not used again it will kill the page it'll be a blank page and if you view the code you'll get different things depending on something no idea what.

This kepted happening I had forgotten I had used $sr so I was using it again and it would just not show the page whenever I used ldap_get_values, if this is a feature it would be nice to know. I haven't seen it happen with other functions.
To Top