XLVIIILDAP 関数

導入

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 SDKには、有用なHTML形式のプログラマ用ガイドがあります。

要件

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

インストール手順

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

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

実行用の設定

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

表 1LDAP設定オプション

名前デフォルト変更の可否
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" から始まる全てのエントリに 関する情報を検索し、名前と電子メールアドレスで検索結果を表示します。

例 1LDAP検索の例

<?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()      // "ログアウト"
     

目次
ldap_8859_to_t61 --  8859文字をt61文字に変換する
ldap_add -- LDAP ディレクトリにエントリを付加する
ldap_bind -- LDAP ディレクトリにバインドする
ldap_close -- LDAP サーバーへのリンクを閉じる
ldap_compare --  DNで指定したエントリで見付かった属性の値を比較する
ldap_connect -- LDAP サーバーへ接続する
ldap_count_entries -- サーチ時のエントリ数をカウントする
ldap_delete -- ディレクトリからエントリを削除する
ldap_dn2ufn --  DN をユーザに分かりやすい名前のフォーマットに変換する
ldap_err2str --  LDAP のエラー番号をエラーメッセージ文字列に変換する
ldap_errno --  直近の LDAP コマンドのLDAP エラー番号を返す
ldap_error --  直近のLDAPコマンドのLDAP エラーメッセージを返す
ldap_explode_dn -- DN を構成要素毎に分割する
ldap_first_attribute -- 最初の属性を返す
ldap_first_entry --  最初の結果 ID を返す
ldap_first_reference --  最初のリファレンスを返す
ldap_free_result -- 結果メモリを開放する
ldap_get_attributes -- サーチ結果エントリから属性を得る
ldap_get_dn -- 結果エントリから 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 エントリを修正する
ldap_next_attribute -- 結果における次の属性を得る
ldap_next_entry -- 次の結果エントリを得る
ldap_next_reference --  次のリファレンスを得る
ldap_parse_reference --  参照エントリかえあ情報を展開する
ldap_parse_result --  結果から情報を展開する
ldap_read -- エントリを読み込む
ldap_rename -- エントリ名を修正する
ldap_search -- LDAP ツリーを探索する
ldap_set_option -- 指定したオプションの値を設定する
ldap_set_rebind_proc --  参照先を再バインドするためのコールバック関数を設定する
ldap_sort --  LDAP結果エントリをソートする
ldap_start_tls --  TLSを開始する
ldap_t61_to_8859 --  t61文字を8859文字に変換する
ldap_unbind -- LDAP ディレクトリへのバインドを解除する