Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

XLVIIILDAP 関数

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
    

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

完全なコードの例

あるディレクトリサーバーから姓が "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-3.3 パッケージまたは Netscape Directory SDK 3.0 のどちらかから完全な LDAP クライアントライブラリを取得する必 要があります。また、PHP の LDAP コールを動作させるには、 PHP を LDAP サポートを有効にして再コンパイルする必要があります。

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

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

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

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

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


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

他の情報

LDAP に関する多くの情報を以下の場所で得ることができます。

ネットスケープ SDK には、.html 形式の有用なプログラマー用ガイドが 含まれています。

目次
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 ディレクトリへのバインドを解除する