Probleme mit LDAP Abfrage (mehr als 1000)
Marco
- php
Hallo zusammen
Ich habe ein kleines Problem und zwar muss ich mit PHP eine LDAP Abfrage machen welches mein AD ausliest. Leider sind es mehr als 1000 Benutzern. Das Problem ist, dass das AD standardmässig nur 1000 Objekte zum abfragen zuläst und ich diese Policy auf dem Windows Server nicht ändern kann / darf!
Wie kann ich es mit PHP lösen, damit ich es "Schrittweise" auslesen kann um dann trotzdem alle Benutzer zu erhalten.
Mein Script sieht Momentan so aus:
<?php
$ldap_server = 'server';
$ldap_user = 'benutzer';
$ldap_password = 'paswort';
$ldap_basedn = 'dc=xxx,dc=zzz';
$ldap_port = "3268";
// Nach was soll gesucht werden?
$filter = "(&(objectClass=user) (samaccountname=*))";
// Verbinde mit Ldap Server
$ds = ldap_connect($ldap_server, $ldap_port) or die (ldap_error($ds));
// Angeblich nötig für den Zugriff auf ein Win2003 AD
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_SIZELIMIT, 400);
// Wenn Verbindung erfolgreich:
if($ds){
$ldapbind = @ldap_bind($ds,$ldap_user,$ldap_password) or die (ldap_error($ds));
$search = ldap_search($ds,$ldap_basedn,$filter) or die (ldap_error($ds));
$data = ldap_get_entries($ds,$search);
$anzahl = ldap_count_entries($ds,$search);
echo "Es gibt ".$anzahl." Einträge im AD";
for ($i=0; $i<$anzahl;$i++) {
$ergebnis[$i]["sn"] = utf8_decode($data[$i]["sn"][0]);
$ergebnis[$i]["givenname"] = utf8_decode($data[$i]["givenname"][0]);
$ergebnis[$i]["telephoneNumber"] = utf8_decode($data[$i]["telephonenumber"][0]);
$ergebnis[$i]["physicalDeliveryOfficeName"] = utf8_decode($data[$i]["physicaldeliveryofficename"][0]);
}
}else{
echo "Fehler!";
}
echo "<html>";
echo "<table border=0>";
for ($i=0; $i<$anzahl; $i++) {
echo "<tr>";
echo "<td width=100>" . $i . "</td>";
echo "<td width=200>" . $ergebnis[$i]["sn"] . ", ".$ergebnis[$i]["givenname"]. "</td>";
echo "<td width=200>" . $ergebnis[$i]["cn"] . ", ".$ergebnis[$i]["givenname"]. "</td>";
echo "<td width=200>" . $ergebnis[$i]["telephoneNumber"] . "</td>";
echo "<td width=150>" . $ergebnis[$i]["physicalDeliveryOfficeName"] . "</td>";
}
echo "</table>";
echo "</body></html>";
?>
Es werden jedoch nur diese 400 angezeigt und es kommt eine Meldung:
ldap_search() [function.ldap-search]: Partial search results returned: Sizelimit exceeded
Wie schaffe ich es, dass es mir alle anzeigt in den 400 Schritten. Ich bin euch für eure Hilfe sehr dankbar!
Marco
Hallo,
Wie kann ich es mit PHP lösen, damit ich es "Schrittweise" auslesen kann um dann trotzdem alle Benutzer zu erhalten.
Das gleiche Problem hatten schon andere vor Dir und unter der folgenden Seite (nach unten scrollen!) gibt es Code, der das Problem angeblich löst:
http://www.edugeek.net/forums/coding/30482-php-ldap-returning-only-some-results.html
Kann das mangels AD nicht selbst testen, hoffe, es hilft Dir aber trotzdem.
Viele Grüße,
Christian
Hallo nochmal,
http://www.edugeek.net/forums/coding/30482-php-ldap-returning-only-some-results.html
Dieses Mailinglistenposting sieht irgendwie noch etwas aktueller aus...
Viele Grüße,
Christian
Hallo Christian
Vielen Dank für Deine Antwort. Ich habe mir die beiden Links angeschaut. Leider aber auf keine Lösung gekommen. Ich schaffe es einfach nicht, das AD "schritt-weise" auszulesen :-(
Hat sonst noch jemand Erfahrungen?
Marco