読み込める属性は、検索時にどの属性を選択したかに依存します。 検索時に選択した属性にしかアクセスできません! 属性の値を読み込むには、Net_LDAP_Entry の getValues() メソッドあるいは getValue() メソッドを使用します。 getValue() は、属性名をキーとする配列を返します。 getValues() には以下のオプションを渡すことができます。
'single'
: 最初の値のみを文字列で返します。
'all'
: すべての値とその数を配列で返します。
'default'
: 値がひとつだけのときは文字列で返し、
複数の場合は配列で返します (この場合の配列には、
値の数は含まれません)。
属性の読み込み
<?php
// 苗字 (値はひとつだけ) を読み込みます
$surename = $entry->getValue('sn', 'single');
// メールアドレス (複数の可能性あり) を読み込みます
$mail = $entry->getValue('mail', 'all');
?>
エントリの識別名 (DN) を読み込みたい場合は、 別のメソッド dn() を使用します。
エントリの DN の読み込み
<?php
$dn = $entry->dn();
?>
PEAR::Net_LDAP は、正規表現で属性にマッチさせるという独特の機能を持っています。 すべての値を取得した後で自分で正規表現を適用するといった手間は不要です。 Net_LDAP_Entry の preg_match() 関数を利用しましょう。この関数の挙動は PHP の preg_match() と同じですが、$matches 配列の構造が少々異なり、 PHP の preg_match() よりも次元の数がひとつ多くなっています。 これは、属性が複数の値をとることがあるからです。 $matches を渡す際は、かならず「参照渡し」とするようにしましょう。 そうしないと $matches は空っぽのままとなります。 preg_match() は、結果に応じて true あるいは false を返します。
正規表現による属性の値の検索
<?php
// ここでは、メールアドレスに 'example' が含まれるユーザを探し、
// みつかった場合はそのアドレスの tld を表示します
// ($matches を参照で渡していることに注意!)
$matches = array();
if ( $entry->preg_match('mail', '/example\.(.+)/', &$matches) ) {
// 'example' の TLD をすべて表示します
foreach ($matches as $match) {
echo $match[1];
}
}
?>
属性の変更がどのように行われるのかを知っておきましょう。
Net_LDAP_Entry オブジェクトに対して変更した内容は、
ローカルにしか存在しません。ひととおりの変更をすませた後で
それをディレクトリサーバに転送したければ、
Net_LDAP_Entry オブジェクトの
update() をコールする必要があります。
これは TRUE
あるいは Net_LDAP_Error
を返します。
もうひとつ注意すべき点として、属性の値を追加したり変更したり削除したりしたい場合は
その属性を検索時に選択しておく必要があります。
そうしないと処理は失敗します。この場合、Net_LDAP
はたいてい何のエラーメッセージも出さずに終了するので、
うまくいったかのように勘違いしてしまう可能性があります。
Net_LDAP は、これから作業しようとしている属性について知っている必要があるということです!
Net_LDAP の modify() メソッドで属性を変更することも可能です。このメソッドは、 指定した Net_LDAP_Entry オブジェクトに対して ここで説明したメソッドを実行し、その後で直接 update() をコールします。 つまり、このメソッドで適用した変更は、すぐにサーバにも反映されるというわけです。 パラメータには、変更する内容を配列で指定します。 これは、初心者にはお勧めしません。 ここで説明している内容だけでは不十分でしょうから、詳細は 最新の API ドキュメントで確認してください。
エントリに属性の値を追加するのは簡単です。 単に add() をコールすればいいだけです! パラメータには、属性名をキーとしてその値を関連付けた配列を渡します。 値がひとつだけの場合は、値は文字列で指定します。 指定した属性が存在しない場合は属性が新たに追加され、 存在する場合にはその属性に値を追加します。
属性の追加
<?php
// 属性を追加します
$result = $entry->add(
array(
'sn' => 'Doe',
'gn' => array('John'),
'mail' => array('[email protected]', '[email protected]')
)
);
?>
値を変更するには replace() メソッドを使用します。
値を追加するのと同様に簡単です。しかし、
値の追加よりもほんの少し気を使う必要があります。
このメソッドのパラメータには、
指定した属性の変更後の状態を表す配列を指定します。
つまり、仮に NULL
を指定したとすると、
その属性が削除されてしまうということです!
値がひとつだけの場合は文字列で指定することもできます。
配列のキーが属性の名前に対応します。
属性の変更
<?php
// いくつかの属性を変更します。
// 'sn' を "Smith" に変更し、'gn' を削除、そして mail には
// 新たに 2 つのアドレスを設定します
$result = $entry->replace(
array(
'sn' => 'Smith',
'gn' => null,
'mail' => array('[email protected]', '[email protected]')
)
);
?>
delete() メソッドを使用すると、
ある属性から特定の値を削除したり属性そのものを削除したりすることができます。
属性の名前を配列のキーに、
そして削除したい値をそのキーに対応した値として指定する必要があります。
属性全体を削除したいのなら、一次元の配列で指定します。
パラメータの配列を省略したり NULL
を指定したりした場合は、エントリ全体が削除されてしまうことに注意しましょう!
また、2 つの方式を同時に使用することはできません。
つまり、ある属性そのものを削除しつつ、
同時に別の属性の特定の値だけを削除するといったことはできないということです。
属性の削除
<?php
// エントリ全体を削除します
$result = $entry->delete();
// telephone number 属性を削除します
$result = $entry->delete('telephoneNumber');
// mail 属性の中の、指定した値を削除します
$result = $entry->delete( array('mail' => '[email protected]') );
// mail と telephone の 2 つの属性そのものを削除します
$result = $entry->delete( array('mail', 'telephoneNumber') );
// 指定した 2 つのメールアドレスを削除します
$result = $entry->delete( array('mail' => array('[email protected]', '[email protected]')) );
?>