2015-09-18 34 views
2

我只是無法弄清楚我做錯了什麼,我已經搜遍網絡尋找答案,但找不到任何有效的東西。請有人看看我的代碼,並告訴我哪裏出錯了?如果我註釋掉「objectclass」,我得到「服務器不願意執行53」,如果我將OU改爲愚蠢的($ dn),那麼我得到「命名衝突」,如果我搗碎鍵盤並隨機輸入即使沒有我輸入的東西的部分存在,用戶的名字仍然會「已經存在」錯誤。如果我爲同一個OU中的另一個CN添加ldap_mod_replace行,它可以正常工作,因此我知道連接正在工作。我已經嘗試了所有除了objectclass之外的'[0]'(正如我在所有示例中所見)。公司和用戶信息編輯明顯。ldap_add在PHP返回「已經存在68」的錯誤

$server = "ldap://ServerName.domain.co.uk"; 
$dn = "OU=Advertising,OU=EmailDepartmentAccounts,OU=Administration,OU=Central,DC=domain,DC=co,DC=uk"; 

//domain user to connect to LDAP 
$user = "[email protected]"; 
//user password 
$psw = "Password"; 

$ds = ldap_connect($server); 
if ($ds) { 
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); 
    $r = ldap_bind($ds, $user, $psw); 

    $proxyaddresses_array = array(); 
    $proxyaddresses_array[0] = "X400:c=GB;a= ;p=Company Name p;o=PWEXCHANGE;s=Kitbag;g=Digital;"; 
    $proxyaddresses_array[1] = "SMTP:[email protected]"; 
    $proxyaddresses_array[2] = "smtp:[email protected]"; 

    //$NewUser = array(); 
    $NewUser["cn"][0] = "Test Maff1"; 
    $NewUser["userprincipalname"][0] = "[email protected]"; 
    $NewUser["samaccountname"][0] = "Test.Maff"; 
    $NewUser["objectClass"][0] = "top"; 
    $NewUser["objectClass"][1] = "person"; 
    $NewUser["objectClass"][2] = "organizationalPerson"; 
    $NewUser["objectClass"][3] = "user"; 
    //$NewUser["givenname"][0] = "Test"; 
    //$NewUser["sn"][0] = "Maff"; 
    //$NewUser["instancetype"][0] = 4; 
    //$NewUser["physicaldeliveryofficename"][0] = "Leeds"; 
    //$NewUser["displayname"][0] = "Test Maff"; 
    //$NewUser["proxyaddresses"] = $proxyaddresses_array; 
    //$NewUser["department"][0] = "IT"; 
    //$NewUser["company"][0] = "Company Name"; 
    //$NewUser["homemta"][0] = "CN=Microsoft MTA,CN=STH-EXC-01B,CN=Servers,CN=BSP,CN=Administrative Groups,CN=Johnston Press plc,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=domain,DC=co,DC=uk"; 
    //$NewUser["displaynameprintable"][0] = "Test Maff"; 
    //$NewUser["mailnickname"][0] = "Test.Maff"; 
    //$NewUser["useraccountcontrol"][0] = "512"; 
    //$NewUser["primarygroupid"][0] = "513"; 
    //$NewUser["name"] [0]= "Test Maff"; 
    $NewUser["objectcategory"][0] = "CN=Person,CN=Schema,CN=Configuration,DC=domain,DC=co,DC=uk"; 
    //$NewUser["mail"] = "[email protected]"; 

    if ($NewUserAdded = ldap_add($ds, $dn, $NewUser)) { 
     echo "success<br />"; 
    } else { 
     echo ldap_error($ds) . " " . ldap_errno($ds); 
    } 
    ldap_close($ds); 
} else { 
    echo "unable to connect to LDAP server"; 
} 

回答

4

我可能是錯的,但是根據我在代碼中讀到的內容,您有條目OU=Advertising,OU=EmailDepartmentAccounts,OU=Administration,OU=Central,DC=domain,DC=co,DC=uk。而據我解釋你的代碼,你想添加一個條目下面那條目。但是您必須提供新的條目的DN作爲ldap_add的第二個參數。但是您提供了新條目的baseDN。那已經在那裏了。否則,您將無法添加任何內容。

所以,你應該調用類似以下內容之前調用ldap_add

$dn = 'cn=' . $NewUser['cn'][0] . ',' . $dn;

使用的基本DN,並與當前用戶的CN預先考慮它。

希望有幫助

+0

非常感謝你,像一個魅力工作 – Maff