Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/08/2011, 15:28
Avatar de Marvin
Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Errores en búsqueda LDAP

Se supone que no es un error, pero deberias usar un foreach para poder sacar los resultados de esta manera:
Código PHP:
Ver original
  1. $result = ldap_search($id, $dn, $filter, $attributes);
  2. //variable flag para saber si encuentro datos
  3. $search = false;
  4. foreach($result as $value){
  5.     if(ldap_count_entries($ds,$value)>0){
  6.         $search = $value;
  7.         break;
  8.     }
  9. }
  10. //si tengo datos los saco a mis variables
  11. if($search){
  12.     $entries = ldap_get_entries($ds, $search);
  13.     if($entries["count"] > 0){
  14.         $oficina = $entries[0]['physicaldeliveryofficename'][0];
  15.         $entradas = $entries[0]['logoncount'][0];
  16.         $cn = $entries[0]['cn'][0];
  17.         return;
  18.     }else{
  19.         $oficina = 'Sin datos';
  20.         $entradas = 'Sin datos';
  21.         $cn = 'Sin datos';
  22.         return;
  23.     }
  24. }else{
  25.     $oficina = 'No encontrado';
  26.     $entradas = 'No encontrado';
  27.     $cn = 'No encontrado';
  28.     return;
  29. }
Te dejo mi funcion completa en caso que sirva de algo:
Código PHP:
Ver original
  1. $ldap = ldap_connect('xxx.xxx.xxx.xxx');
  2. if (ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3)) {
  3.     $login = @ldap_bind($ldap, $user, $pass);
  4.     if(!$login){
  5.         ldap_close($ldap);
  6.         $arr['msg'] = 'LDAP ERROR'.ldap_error($ldap);
  7.         $arr['failure'] = 'true';
  8.         return $arr;
  9.     }else{
  10.         //Con este formato puedes buscar en mas de un directorio en el AD
  11.         $dn[]="OU=OtroDirectorio,DC=dominio,DC=cl";
  12.         $dn[]="OU=UnDirectorio,DC=dominio,DC=cl";
  13.         $id[] = $ldap;
  14.         $id[] = $ldap;
  15.         $attributes = array("cn", "company","accountExpires","logonCount","physicalDeliveryOfficeName","mail");
  16.         $filter = "(&(objectCategory=Person)(userPrincipalName=$username))";
  17.         $result = ldap_search($id, $dn, $filter, $attributes);
  18.         $search = false;
  19.         foreach($result as $value){
  20.             if(ldap_count_entries($ldap,$value)>0){
  21.                 $search = $value;
  22.                 break;
  23.             }
  24.         }
  25.         if($search){
  26.             $entries = ldap_get_entries($ldap, $search);
  27.             if($entries["count"] > 0){
  28.                 $_SESSION['USER_OFI'] = $entries[0]['physicaldeliveryofficename'][0];
  29.                 $_SESSION['USER_MBO'] = $entries[0]['logoncount'][0];
  30.                 $_SESSION['USER_CNX'] = $entries[0]['cn'][0];
  31.                 return;
  32.             }else{
  33.                 $_SESSION['USER_OFI'] = '';
  34.                 $_SESSION['USER_MBO'] = '';
  35.                 $_SESSION['USER_CNX'] = '';
  36.                 return;
  37.             }
  38.         }else{
  39.             $_SESSION['USER_OFI'] = '';
  40.             $_SESSION['USER_MBO'] = '';
  41.             $_SESSION['USER_CNX'] = '';
  42.             return;
  43.         }
  44.         ldap_close($ldap);
  45.         $arr['success'] = 'true';
  46.         return $arr;
  47.     }
  48. }else{
  49.     ldap_close($ldap);
  50.     $arr['msg'] = 'LDAP ERROR'.ldap_error($ldap);
  51.     $arr['failure'] = 'true';
  52.     return $arr;
  53. }
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!

Última edición por Marvin; 17/08/2011 a las 15:31 Razón: Agregar informacion relevante a la funcion