У меня есть форма, подключенная к активному каталогу, где я должен создать пользователя, выполнив поиск в Active Directory. Поиск пользователя выполняется в раскрывающемся списке с возможностью поиска, но выдается ошибка «Попытка получить доступ к смещению массива для значения типа null»
Ошибка в строке 48
while ($values["count"] > 0)
Функция в LDAP. php
public function getUsersAD($uname = "") {
$host = Yii::$app->params['ldaphost'];
$domain = Yii::$app->params['domain'];
$username = Yii::$app->params['username'] . $domain;
$password = Yii::$app->params['password'];
$ldapdomain = Yii::$app->params['ldapdomain'];
$ldapdomain2 = Yii::$app->params['ldapdomain2'];
$ldaptld = Yii::$app->params['ldaptld'];
// $dn = "DC=UAT,DC=UBCRDB,DC=COM";
$dn = "DC=" . $ldapdomain . ",DC=" . $ldaptld;
if ($ldapdomain2) {
$dn = "DC=" . $ldapdomain . ",DC=" . $ldapdomain2 . ",DC=" . $ldaptld;
}
$filter = "(&(objectclass=person)(givenName=*)(userPrincipalName={$uname}*))";
$ad = @ldap_connect($host)
or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($ad, $username, $password);
$data = array();
$result = @ldap_search($ad, $dn, $filter);
$entry = @ldap_first_entry($ad, $result);
$values = @ldap_get_values($ad, $entry, "cn");
while ($values["count"] > 0) {
$user = array();
$user["fullName"] = $values[0]; //Full name
$values = @ldap_get_values($ad, $entry, "telephoneNumber");
$user["telephoneNumber"] = $values[0];
$values = @ldap_get_values($ad, $entry, "userPrincipalName");
$user["value"] = $values[0]; //username
$user["text"] = str_replace(strtoupper($domain),"",$values[0]); //username
$user["id"] = str_replace(strtoupper($domain),"",$values[0]); //username
$values = @ldap_get_values($ad, $entry, "mail");
$user["EmailAddress"] = $values[0];
$data[] = $user;
$entry = @ldap_next_entry($ad, $entry);
$values = @ldap_get_values($ad, $entry, "cn");
}
ldap_unbind($ad);
return $data;
}