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

# LXXIII. 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 に関する多くの情報が以下の場所にあります。

- Mozilla

- OpenLDAP Project

Netscape SDK では、有用な プログラマーズガイド が HTML 形式で公開されています。

# 要件

LDAP サポートを有効にして PHP をコンパイルするには、 OpenLDAP あるいは Bind9.net から LDAP クライアント ライブラリを入手し、コンパイルしておく必要があります。

# インストール手順

PHP の LDAP サポートはデフォルトで有効になっていません。 LDAP サポートを有効にして PHP をコンパイルするには、設定オプション `--with-ldap[=DIR]` を指定して PHP をコンパイルする必要があります。 DIR は LDAP をインストールしたディレクトリです。 SASL サポートを有効にするためには、システム上に sasl.h を用意し、 `--with-ldap-sasl[=DIR]` を指定する必要があります。

> Win32 ユーザへの注意: Windows 環境でこの拡張モジュールを有効にするには、 PHP/Win32 バイナリパッケージの DLL フォルダから Windows マシンの SYSTEM32 フォルダ(例: C:\WINNT\SYSTEM32 または C:\WINDOWS\SYSTEM32) に DLL ファイルをコピーする必要があります。 PHP <= 4.2.0ならば libsasl.dll、PHP <= 4.3.0 ならば libeay32.dll と ssleay32.dll を SYSTEM32 フォルダにコピーしてください。

Oracle LDAP ライブラリを使用するには、Oracle 環境 が適切に設定されている 必要があります。

# 実行時設定

`php.ini` の設定により動作が変化します。

表 1. LDAP 設定オプション

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

PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

# リソース型

リソース型は定義されていません。

# 定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが 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 . "<br />";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // これは "匿名" バインドで、通常は
// 読みこみのみのアクセスとなります。
echo "Bind result is " . $r . "<br />";
echo "Searching for (sn=S*) ...";
// 名前(surname)エントリを検索
$sr=ldap_search($ds, "o=My Company, c=US", "sn=S*");
echo "Search result is " . $sr . "<br />";
echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";
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] . "<br /><hr />";
}
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() // "ログアウト"

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