Signatur
Beschreibung
ldap_free_result() gibt explizit den Speicher frei, der intern durch ein LDAP-Ergebnisobjekt belegt wird, das beispielsweise durch ldap_search(), ldap_list() oder ldap_read() zurückgegeben wurde. Normalerweise gibt PHP diesen Speicher automatisch am Ende des Skripts oder sobald das Ergebnisobjekt den Gültigkeitsbereich verlässt, frei. Bei sehr großen LDAP-Ergebnismengen oder in langlebigen Skripten kann es jedoch sinnvoll sein, den Speicher frühzeitig explizit freizugeben.
Typische Anwendungsfälle sind Skripte, die in Schleifen viele LDAP-Abfragen durchführen und dabei den Speicherverbrauch möglichst niedrig halten sollen. Durch den expliziten Aufruf wird sichergestellt, dass die C-seitigen LDAP-Ergebnisdaten sofort freigegeben werden, ohne auf den PHP-Garbage-Collector warten zu müssen.
Ab PHP 8.1 wird anstelle eines einfachen Ressource-Handles ein LDAP\Result-Objekt verwendet. In älteren PHP-Versionen (5.x–8.0) war der Parameter noch ein Ressource-Typ (resource $result).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | LDAP\Result | Das LDAP-Ergebnisobjekt, das durch eine LDAP-Suchfunktion wie ldap_search(), ldap_list() oder ldap_read() zurückgegeben wurde. |
Rückgabewert
true zurück, wenn der Speicher erfolgreich freigegeben wurde, oder false bei einem Fehler (z. B. wenn ein ungültiges Ergebnisobjekt übergeben wurde).Beispiele
Explizite Speicherfreigabe nach einer LDAP-Suche
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$result = ldap_search($ldap, 'dc=example,dc=com', '(objectClass=person)');
if ($result) {
$entries = ldap_get_entries($ldap, $result);
echo 'Gefundene Einträge: ' . $entries['count'] . PHP_EOL;
// Speicher explizit freigeben, da er nicht mehr benötigt wird
ldap_free_result($result);
}
ldap_unbind($ldap);
Speicherfreigabe in einer Schleife mit mehreren Abfragen
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldap, 'cn=admin,dc=example,dc=com', 'geheimesPasswort');
$abteilungen = ['ou=sales', 'ou=it', 'ou=hr'];
foreach ($abteilungen as $ou) {
$base = $ou . ',dc=example,dc=com';
$result = ldap_search($ldap, $base, '(objectClass=person)');
if ($result) {
$entries = ldap_get_entries($ldap, $result);
echo $ou . ': ' . $entries['count'] . ' Personen' . PHP_EOL;
// Speicher nach jeder Iteration sofort freigeben
ldap_free_result($result);
}
}
ldap_unbind($ldap);
// Wichtig · Fallstricke
Hinweis zur Notwendigkeit: In den meisten Skripten ist ein expliziter Aufruf von ldap_free_result() nicht erforderlich, da PHP den Speicher automatisch freigibt, sobald das Ergebnisobjekt den Gültigkeitsbereich verlässt oder das Skript endet. Der Einsatz empfiehlt sich jedoch bei speicherintensiven Operationen in Schleifen oder in CLI-Skripten mit langer Laufzeit.
PHP 8.1+: Das übergebene Argument muss eine Instanz von LDAP\Result sein. In PHP <= 8.0 war es eine resource. Code, der Ressource-Handles verwendet, muss für PHP 8.1 angepasst werden.