php-ldap搜索几乎需要30-35秒来搜索
我使用ldap搜索按用户ID获取用户信息。总共有500条记录,从LDAP获取用户信息的函数被调用了500次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
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');
}