PHP マニュアル
前のページ |  | 次のページ

# XLIX. LDAP 関数

# 導入

LDAP とは Lightweight Directory Access Protocol を意味し、"ディレ クトリ・サーバー" にアクセスするために使用されるプロトコルです。ディ レクトリとは、ツリー構造に情報を保持している特殊なデータベースのこ とです。

この概念は、ハードディスクのディレクトリ構造に似ています。 ただし、その内容は異なっており、ルートディレクトリは "世界" であり、 最初のレベルのサブディレクトリは "国" となります。ディレクトリ構造 の下位には、会社や機関、場所のエントリがあります。さらに下位には、 人やおそらく道具や文書に関するディレクトリエントリもあります。

ハードディスクにあるサブディレクトリにあるファイルを参照するには、 次のようにします。

/usr/local/myapp/docs

スラッシュは、リファレンスの各部分を区分し、解釈は左から右に行われます。

LDAP においてこの完全に正しいファイル参照に等価なものは "区分された名前(distinguished name)"であり、単に"dn"と表されます。 例として dn が次のようになっているとしましょう。

cn=John Smith,ou=Accounts,o=My Company,c=US

カンマは各部分を区分し、右から左に解釈されます。この dn は次のよう に解釈されます。

country = US
organization = My Company
organizationalUnit = Accounts
commonName = John Smith

ハードディスクのディレクトリ構造を管理する手法について明確な規約が ないのと同様に、ディレクトリサーバーマネージャーは、目的に適したあ らゆる構造を設定することが可能です。しかし、実用的にはいくつかの慣 習があります。 利用可能なものに関する情報を持たずにデータベースを使用する ことができないのと同様にディレクトリの構造に関する情報なくして ディレクトリサーバーにアクセスするコードを書くことはできない ということが言えます。

LDAPに関する多くの情報が以下の場所にあります。

- Netscape

- University of Michigan

- OpenLDAP Project

- LDAP World

Netscape SDKには、有用なHTML形式のプログラマ用ガイドがあります。

# 要件

LDAPサポートを有効にしてPHPをコンパイルするには、ミシガン大学の ldap-3.3パッケージまたはNetscape Directory SDK 3.0のLDAPクライア ントライブラリを入手し、コンパイルしておく必要があります。

# インストール手順

PHPのLDAPサポートはデフォルトで有効になっていません。 LDAPサポートを有効にしてPHPをコンパイルするには、設定オプション `--with-ldap[=DIR]` を指定してPHPをコンパイルする必要があります。

> Win32ユーザへの注意: この拡張モジュールを有効にするには、PHP/Win32バイナリパッケージの DLLフォルダからlibsasl.dllを使用するWindowsマ シンのSYSTEM32フォルダ(例:C:\WINNT\SYSTEM32または C:\WINDOWS\SYSTEM32)にコピーする必要があります。

# 実行用の設定

これらの関数の動作は、`php.ini`の設定により変化します。

表 1. LDAP設定オプション

名前 | デフォルト | 変更の可否
--- | --- | ---
ldap.max_links | "-1" | PHP_INI_SYSTEM

PHP_INI_* 定数の詳細と定義については、 ini_set()を参照して下さい。

# リソース型

この拡張モジュールはリソース型を全く定義し ません。

# 定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

`LDAP_DEREF_NEVER` (integer)

`LDAP_DEREF_SEARCHING` (integer)

`LDAP_DEREF_FINDING` (integer)

`LDAP_DEREF_ALWAYS` (integer)

`LDAP_OPT_DEREF` (integer)

`LDAP_OPT_SIZELIMIT` (integer)

`LDAP_OPT_TIMELIMIT` (integer)

`LDAP_OPT_PROTOCOL_VERSION` (integer)

`LDAP_OPT_ERROR_NUMBER` (integer)

`LDAP_OPT_REFERRALS` (integer)

`LDAP_OPT_RESTART` (integer)

`LDAP_OPT_HOST_NAME` (integer)

`LDAP_OPT_ERROR_STRING` (integer)

`LDAP_OPT_MATCHED_DN` (integer)

`LDAP_OPT_SERVER_CONTROLS` (integer)

`LDAP_OPT_CLIENT_CONTROLS` (integer)

`LDAP_OPT_DEBUG_LEVEL` (integer)

`GSLC_SSL_NO_AUTH` (integer)

`GSLC_SSL_ONEWAY_AUTH` (integer)

`GSLC_SSL_TWOWAY_AUTH` (integer)

# 例

あるディレクトリサーバーから姓が "S" から始まる全てのエントリに 関する情報を検索し、名前と電子メールアドレスで検索結果を表示します。

例 1. LDAP検索の例

`<?php
// LDAP の基本シーケンスは、接続、バインド、検索、検索結果の解釈、
// 接続のクローズです。
echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost"); // 有効な LDAP サーバーに違いない!
echo "connect result is ".$ds."<p>";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // これは "匿名" バインドで、通常は
// 読みこみのみのアクセスとなります。
echo "Bind result is ".$r."<p>";
echo "Searching for (sn=S*) ...";
// 名前(surname)エントリを検索
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Search result is ".$sr."<p>";
echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."<p>";
echo "Getting entries ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Data for ".$info["count"]." items returned:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: ". $info[$i]["dn"] ."<br>";
echo "first cn entry is: ". $info[$i]["cn"][0] ."<br>";
echo "first email entry is: ". $info[$i]["mail"][0] ."<p>";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
?>`

# PHP LDAP コールの使用法

LDAP コールを使用する前に、以下のことを知っておいてください。

- 使用するディレクトリサーバーの名前またはアドレス

- サーバーの "base dn" (このサーバーがあるワールドディレクトリ の部分で、"o=My Company,c=US" のようにすることができます)

- サーバーへのアクセスにパスワードを必要とするかどうか。 (多くのサーバーは "匿名バインド" に関して読みこみを 許可するが、他の処理についてはパスワードを要求します)

アプリケーションとして作成する LDAP コールのシーケンスは、 通常、次のようなパターンに沿っています。

ldap_connect() // サーバーへの接続を確立
|
ldap_bind() // 匿名または認証された "ログイン"
|
ディレクトリの検索または更新等を行い、結果を表示する
|
ldap_close() // "ログアウト"

前のページ | ホーム | 次のページ
java_last_exception_get | 上に戻る | ldap_8859_to_t61