ldap_modify_batch

LDAP エントリの変更をまとめて実行する

説明

bool ldap_modify_batch(
    LDAP\Connection $ldap,
    string $dn,
    array $modifications_info,
    arraynull $controls = null
)

LDAP ディレクトリに存在する既存のエントリを変更します。 実行する変更の詳細な仕様を指定できます。

パラメータ

ldap

ldap_connect で返された、LDAP リソース。

dn

LDAP エンティティの識別名。

modifications_info

行う変更を指定する配列。 この配列の個々のエントリは、2つまたは3つのキーからなる連想配列です: attrib は、変更する属性の名前に対応します。 modtype は、行う変更のタイプに対応し、 (変更のタイプによっては) values が変更に関連した属性値の配列に対応します。

modtype で有効な値は以下のとおりです:

LDAP_MODIFY_BATCH_ADD

values で指定された値が、 (追加の値として) attrib で指定された属性に追加されます。

LDAP_MODIFY_BATCH_REMOVE

values で指定された値が、 attrib で指定された属性から削除されます。 values に含まれていない属性の値は、そのまま残されます。

LDAP_MODIFY_BATCH_REMOVE_ALL

attrib で指定された属性名から、全ての値を削除します。 values エントリを指定してはいけません。

LDAP_MODIFY_BATCH_REPLACE

attrib の属性名の現在の全ての値が、 values で指定された値で置き換えられます。

以下の点に注意してください: attrib の値は文字列でなければいけません。 values の値は、文字列の配列でなければいけません。 そして、 modtype の値は、上で示した LDAP_MODIFY_BATCH_* 定数のうちのひとつでなければいけません。

controls

リクエストと一緒に送信する LDAP コントロール の配列

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.1.0 引数 ldap は、LDAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な ldap link リソース を期待していました。
8.0.0 controls は、nullable になりました。 これより前のバージョンでは、デフォルト値が [] でした。
7.3.0 controls のサポートが追加されました。

例1 contact に電話番号を追加する

<?php
$dn = "cn=John Smith,ou=Wizards,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "telephoneNumber",
        "modtype" => LDAP_MODIFY_BATCH_ADD,
        "values"  => ["+1 555 555 1717"],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);
?>

例2 ユーザーの名前を変更する

<?php
$dn = "cn=John Smith,ou=Wizards,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "sn",
        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
        "values"  => ["Smith-Jones"],
    ],
    [
        "attrib"  => "givenName",
        "modtype" => LDAP_MODIFY_BATCH_REPLACE,
        "values"  => ["Jack"],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);
ldap_rename($connection, $dn, "cn=Jack Smith-Jones", NULL, TRUE);
?>

例3 ユーザーにEメールアドレスを2つ追加する

<?php
$dn = "cn=Jack Smith-Jones,ou=Wizards,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "mail",
        "modtype" => LDAP_MODIFY_BATCH_ADD,
        "values"  => [
            "jack.smith@example.com",
            "jack.smith-jones@example.com",
        ],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);
?>

例4 ユーザーのパスワードを変更する

<?php
$dn = "cn=Jack Smith-Jones,ou=Wizards,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "userPassword",
        "modtype" => LDAP_MODIFY_BATCH_REMOVE,
        "values"  => ["Tr0ub4dor&3"],
    ],
    [
        "attrib"  => "userPassword",
        "modtype" => LDAP_MODIFY_BATCH_ADD,
        "values"  => ["correct horse battery staple"],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);
?>

例5 ユーザーのパスワードを変更する(Active Directory)

<?php
function adifyPw($pw)
{
    return iconv("UTF-8", "UTF-16LE", '"' . $pw . '"');
}

$dn = "cn=Jack Smith-Jones,ou=Wizards,dc=ad,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "unicodePwd",
        "modtype" => LDAP_MODIFY_BATCH_REMOVE,
        "values"  => [adifyPw("Tr0ub4dor&3")],
    ],
    [
        "attrib"  => "unicodePwd",
        "modtype" => LDAP_MODIFY_BATCH_ADD,
        "values"  => [adifyPw("correct horse battery staple")],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);