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

# ldap_modify_batch

(PHP 5.4 >= 5.4.26, PHP 5.5 >= 5.5.10, PHP 5.6 >= 5.6.0, PHP 7, PHP 8)

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

### 説明

function ldap_modify_batch(
LDAP\Connection `$ldap`,
string `$dn`,
array `$modifications_info`,
?array `$controls` = `null`
): bool

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` resource を期待していました。
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);

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open