Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-ldap搜索几乎需要30-35秒来搜索_Php_Ldap - Fatal编程技术网

php-ldap搜索几乎需要30-35秒来搜索

php-ldap搜索几乎需要30-35秒来搜索,php,ldap,Php,Ldap,我使用ldap搜索按用户ID获取用户信息。总共有500条记录,从LDAP获取用户信息的函数被调用了500次 inside while loop $userInfo = getUserInfo($booking_info['user_id']); 下面是getUserInfo函数 function getUserInfo($passedUserId){ global $ldapConnection; global $bind; global $baseDn; if

我使用ldap搜索按用户ID获取用户信息。总共有500条记录,从LDAP获取用户信息的函数被调用了500次

inside while loop
$userInfo = getUserInfo($booking_info['user_id']);
下面是getUserInfo函数

function getUserInfo($passedUserId){
    global $ldapConnection;
    global $bind;
    global $baseDn;
    if($bind){
        $ldapFilter = "(sAMAccountName=" . $passedUserId . ")";
        $ldapResult = ldap_search($ldapConnection, $baseDn, $ldapFilter);
        $ldapInfo   = ldap_get_entries($ldapConnection, $ldapResult);
        if(isset($ldapInfo[0])){
            if($ldapInfo[0]["givenname"][0]){
                $firstName      = $ldapInfo[0]["givenname"][0];
            }
            if($ldapInfo[0]["sn"][0]){
                $lastName       = $ldapInfo[0]["sn"][0];
            }
            if($ldapInfo[0]["mail"][0]){
                $emailAddress   = $ldapInfo[0]["mail"][0];
            }
            if ($ldapInfo[0]["extensionattribute1"][0]) {
                $costCentre = $ldapInfo[0]["extensionattribute1"][0];
            }
            if ($ldapInfo[0]["department"][0]) {
                $organizationalUnit = $ldapInfo[0]["department"][0];
            }
            if ($ldapInfo[0]["manager"][0]) {
                $lineManager = split("=", split(",", $ldapInfo[0]["manager"][0])[0])[1];
            }
            return Array($firstName, $lastName, $emailAddress, $costCentre, $organizationalUnit, $lineManager);
        }
    }
    return Array('None', 'None', 'None', 'None', 'None', 'None');
}
完成请求大约需要30-35秒


如何优化此函数以加快搜索速度?

我已将getUserInfo函数更改为接受用户ID数组,ldap\u搜索筛选器具有在单个请求中传递多个ID的功能

传递500个用户ID的数组,因此只需调用一次getMultipleUserInfo

过滤器字符串将是“(|(sAMAccountName=user_id0)(sAMAccountName=user_id1)(sAMAccountName=user_id2)…(sAMAccountName=user_id499))”

函数getMultipleUserInfo($passedUsersArray){ 全球$ldapConnection; 全球美元绑定; 全球$baseDn; $userInfoArray=Array(); $filterString=''; $count=0; if(是_数组($passedUsersArray)){ foreach($passedUsersArrayas$key=>$value){ $count++; $filterString.=“(sAMAccountName=”.$key.)”; } } 如果($bind){ $ldapFilter=“(|”。$filterString.”); $justthises=数组(“ou”、“sn”、“givenname”、“mail”); $ldapResult=ldap\u搜索($ldapConnection,$baseDn,$ldapFilter,Array(),0,0); $ldapInfo=ldap\u get\u条目($ldapConnection,$ldapResult);
对于($info=0;$info很难说瓶颈在哪里……你能用一个简单的函数来替换你的
getUserInfo
函数中的所有内容吗,比如
return true;
,然后再次运行它,看看这是否会导致响应时间变慢。谢谢@Daniel是的,我做了,并且发现
ldap\u search
会使响应速度变慢。那么,你怎么能呢我做的内置功能工作快吗?
function getMultipleUserInfo($passedUsersArray){
    global $ldapConnection;
    global $bind;
    global $baseDn;
    $userInfoArray = Array();
    $filterString = '';
    $count = 0;
    if(is_array($passedUsersArray)){
        foreach ($passedUsersArrayas $key => $value) {
            $count++;
            $filterString .= "(sAMAccountName=" . $key . ")";                
        }
    }
    if($bind){
        $ldapFilter = "(|" . $filterString . ")";
        $justthese  = array("ou", "sn", "givenname", "mail");
        $ldapResult = ldap_search($ldapConnection, $baseDn, $ldapFilter, Array(), 0, 0);
        $ldapInfo   = ldap_get_entries($ldapConnection, $ldapResult);
        for($info=0; $info<count($ldapInfo); $info++){
            if(isset($ldapInfo[$info])){
                if($ldapInfo[$info]["givenname"][0]){
                    $firstName      = $ldapInfo[$info]["givenname"][0];
                }
                if($ldapInfo[$info]["sn"][0]){
                    $lastName       = $ldapInfo[$info]["sn"][0];
                }
                if($ldapInfo[$info]["mail"][0]){
                    $emailAddress   = $ldapInfo[$info]["mail"][0];
                }
                if ($ldapInfo[$info]["extensionattribute1"][0]) {
                    $costCentre = $ldapInfo[$info]["extensionattribute1"][0];
                }
                if ($ldapInfo[$info]["department"][0]) {
                    $organizationalUnit = $ldapInfo[$info]["department"][0];
                }
                if ($ldapInfo[$info]["manager"][0]) {
                    $lineManager = split("=", split(",", $ldapInfo[$info]["manager"][0])[0])[1];
                }
                if ($ldapInfo[$info]["extensionattribute7"][0]) {
                    $usr= strtolower($ldapInfo[$info]["extensionattribute7"][0]);
                }
                // return Array($firstName, $lastName, $emailAddress, $costCentre, $organizationalUnit, $lineManager);
                if($usr=== ''){
                    $usr= 'invalid';
                }
                $userInfoArray [$usr] = Array($firstName, $lastName, $emailAddress, $costCentre, $organizationalUnit, $lineManager);
            }
        }
        return $userInfoArray ;
    }
    return Array('None', 'None', 'None', 'None', 'None', 'None');
}