使用ldap_add()函数报错Unknown attribute in the data问题求助
解决ldap_add()报错“Unknown attribute in the data”的问题
问题根源分析
你遇到的错误是因为AD(Active Directory)不识别传入的部分属性,或属性对应的对象类未正确声明,具体问题点如下:
- objectClass设置不完整:仅指定
person对象类不足以支持AD用户的核心属性(如samaccountname),AD创建用户需要包含top、person、organizationalPerson、user这一系列对象类,这类层级关系才能让用户属性生效。 - 冗余的
name属性:AD中的name属性默认对应对象的RDN(即你DN中的CN=$cn),不需要单独在属性数组中设置,手动添加该属性会导致AD无法识别。
修改后的代码示例
<?php $prenom = $_POST['prenom']; $nom = $_POST['nom']; // 管理员身份绑定 $r = ldap_bind($ldap_connection, $ldap_username, $ldap_password); // 准备用户数据 $cn = "$nom $prenom"; $info["cn"] = $cn; $info["sn"] = $nom; $info["givenname"] = $prenom; $info["displayname"] = "$prenom $nom"; $info["samaccountname"] = "$prenom.$nom"; // 补充完整的对象类,支持AD用户属性 $info["objectclass"] = ["top", "person", "organizationalPerson", "user"]; // 可选:设置用户状态为启用(512=正常启用,514=禁用) $info["useraccountcontrol"] = "512"; // 执行添加操作(确保$dn是正确的AD容器/OU,比如"OU=Users,DC=example,DC=com") $r = ldap_add($ldap_connection, "CN=$cn,$dn", $info); // 关闭连接 ldap_close($ldap_connection); echo "L'enregistrement a réussi !!!"; ?>
额外验证步骤
- 确认
$dn变量的值是AD中合法的容器或组织单元(比如OU=Users,DC=yourdomain,DC=com),否则会出现DN格式错误。 - 检查绑定的管理员账号是否拥有创建用户的权限,权限不足也可能导致隐性错误。
- 如果仍报错,可以逐个移除属性测试,定位到底是哪个属性触发了错误。
内容的提问来源于stack exchange,提问作者Antoine Blanquet
相关产品推荐
相关产品推荐

