LDAP とは Lightweight Directory Access Protocol を意味し、 "ディレクトリ・サーバー" にアクセスするために使用される プロトコルです。 ディレクトリとは、ツリー構造に情報を保持している特殊な データベースのことです。
この概念は、ハードディスクのディレクトリ構造に似ています。 ただし、その内容は異なっており、ルートディレクトリは "世界" であり、 最初のレベルのサブディレクトリは "国" となります。 ディレクトリ構造の下位には、会社や機関、場所のエントリがあります。 さらに下位には、人やおそらく道具や文書に関するディレクトリエントリも あります。
ハードディスクにあるサブディレクトリにあるファイルを参照するには、 次のようにすることでしょう。
/usr/local/myapp/docs
スラッシュは、リファレンスの各部分を区分し、解釈は左から右に行われます。
LDAP において完全に正しいファイル参照に等価なものは、 "区分された名前"です。 The equivalent to the fully qualified file reference in LDAP is the "distinguished name", referred to simply as "dn". An example 例として dn が次のようになっているとしましょう。
cn=John Smith,ou=Accounts,o=My Company,c=US
カンマは各部分を区分し、右から左に解釈されます。 この dn は次のように解釈されます。
country = US
organization = My Company
organizationalUnit = Accounts
commonName = John Smith
ハードディスクのディレクトリ構造を管理する手法について 明確な規約がないのと同様に、 ディレクトリサーバーマネージャーは、 目的に適したあらゆる構造を設定することが可能です。 しかし、実用的にはいくつかの慣習があります。 利用可能なものに関する情報を持たずにデータベースを使用する ことができないのと同様に ディレクトリの構造に関する情報なくして ディレクトリサーバーにアクセスするコードを書くことはできない ということが言えます。
あるディレクトリサーバーから姓が "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*) ..."; // Search surname entry $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>"; } ?>
ミシガン大の ldap-3.3 パッケージまたはネットスケープのディレクトリ SDK のどちらかから 完全な LDAP クライアントライブラリを取得する必要があります。 また、PHP の LDAP コールを動作させるには、 PHP を LDAP サポートを有効にして再コンパイルする必要があります。
LDAP コールを使用する前に、以下のことを知っておいてください。
使用するディレクトリサーバーの名前またはアドレス
サーバーの "base dn" (このサーバーがあるワールドディレクトリ の部分で、"o=My Company,c=US" のようにすることができます)
サーバーへのアクセスにパスワードを必要とするかどうか。 (多くのサーバーは "匿名バインド" にかんして読みこみを 許可するが、他の処理についてはパスワードを要求します)
アプリケーションとして作成する LDAP コールのシーケンスは、 通常、次のようなパターンに沿っています。
ldap_connect() // サーバーへの接続を確立
|
ldap_bind() // 匿名または認証された "ログイン"
|
ディレクトリの検索または更新等を行い、結果を表示する
|
ldap_close() // "ログアウト"