我每天都在寻找我的问题,我尝试了很多解决方案,但我没有找到...:(
我想在 PHP 中使用 ldap_add 创建一个用户。在没有启用帐户和密码的情况下工作正常。您可以在下面找到代码。
你能帮帮我吗?
配置: PHP 5.6 带有 AD 的 Windows Server 2012 R2
当我使用 $info["useraccountcontrol"]=544;
时我可以启用一个帐户,但是该帐户没有密码...用户必须在没有密码的情况下登录并输入他的新密码在第一次连接时。 *
我尝试使用 $info['userPassword']
添加密码并在 512 更改 useraccountontrol,但出现此错误:
ldap_add(): 添加:服务器不愿执行
这是我的代码:
<?php
$name = htmlspecialchars($_POST["name_build"]);
$lastname = htmlspecialchars($_POST["lastname_build"]);
$department = utf8_encode(htmlspecialchars($_POST["department_build"]));
$title = utf8_encode(htmlspecialchars($_POST["title_build"]));
$dn="CN=$name OU=Users, o=Domocom, c=net";
$ds = ldap_connect("192.168.1.1",389);
if ($ds) {
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // IMPORTANT
ldap_bind($ds, "administrateur@domocom.net", "password");
// Prépareles données
$cn = $info["cn"] = "$lastname $name";
$info["sn"]="$name";
$info["givenname"]="$lastname";
$info["displayname"]="$lastname $name";
$info["name"]="$lastname $name";
$info["userprincipalname"]= "$lastname.$name@domocom.net";
$info["samaccountname"]= "$lastname.$name";
$info["title"]="$title";
$info["department"]="$department";
$info["mail"]="$lastname.$name@domocom.fr";
$info["postalcode"]="69009";
$info["objectClass"][0]="user";
//$info['userPassword'] = "password";
//$info["useraccountcontrol"]=544;
$r = ldap_add($ds,"CN=$cn,OU=Users,OU=Direction,OU=Domocom-SP,DC=domocom,DC=net", $info);
ldap_close($ds);
} else {
echo "unable to connect to ldap server";
}
?>
非常感谢。
PS:这是我学校的假社会。 :p
最佳答案
如果是 AD,您可能需要使用安全的 LDAP 连接。
为此,您需要调用 ldap_connect('ldaps://192.168.1.1:<port of the AD>');
.打电话ldap_connect
有两个参数已弃用,应避免使用。将它与 LDAP-URI 一起使用!
您也可以省略 if…else
ldap_connect
周围因为它几乎在所有情况下都会返回 true。还有一个 true
返回值并不意味着与服务器的连接实际已建立。首先在需要连接的第一个 ldap_ 命令上建立连接,该连接通常为 ldap_bind
.
然后你可能想看看 Change AD password using PHP , Issue updating AD password using PHP和 Change AD Password using PHP/COM/ADSI/LDAP
关于php - 使用 LDAP PHP 添加密码用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787651/