Signatur
Beschreibung
Die Funktion xml_parser_free() beendet die Lebensdauer eines XML-Parser-Objekts und gibt den zugehörigen Speicher frei. Sie sollte immer aufgerufen werden, wenn der Parser nicht mehr benötigt wird, um Speicherlecks zu vermeiden – insbesondere in langlebigen Prozessen oder bei der Verarbeitung vieler Dokumente in einer Schleife.
Seit PHP 8.0.0 ist der frühere Ressourcentyp resource durch ein echtes XMLParser-Objekt ersetzt worden. In älteren PHP-Versionen war der Parameter ein resource. Das explizite Freigeben ist in modernen PHP-Versionen durch die Garbage Collection weniger kritisch, bleibt aber gute Praxis und ist in Umgebungen mit hohem Durchsatz weiterhin empfehlenswert.
Typischerweise wird xml_parser_free() am Ende eines try/finally-Blocks oder nach der vollständigen Verarbeitung eines XML-Dokuments aufgerufen, um sicherzustellen, dass der Parser in jedem Fall freigegeben wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $parser Pflicht | XMLParser | Ein XML-Parser-Objekt, das zuvor mit xml_parser_create() oder xml_parser_create_ns() erstellt wurde. |
Rückgabewert
true zurück, wenn der Parser erfolgreich freigegeben wurde, andernfalls false (z. B. wenn kein gültiger Parser übergeben wurde).Beispiele
Einfaches Freigeben eines XML-Parsers nach der Verarbeitung
<?php
$parser = xml_parser_create();
xml_set_element_handler(
$parser,
function ($parser, $name, $attrs) {
echo "Start-Tag: $name\n";
},
function ($parser, $name) {
echo "End-Tag: $name\n";
}
);
$xml = '<root><child id="1">Text</child></root>';
xml_parse($parser, $xml, true);
xml_parser_free($parser);
echo "Parser freigegeben.\n";
Robuste Verarbeitung mit try/finally zur sicheren Freigabe
<?php
$parser = xml_parser_create('UTF-8');
try {
xml_set_character_data_handler($parser, function ($parser, $data) {
$trimmed = trim($data);
if ($trimmed !== '') {
echo "Text: $trimmed\n";
}
});
$xmlData = '<items><item>Apfel</item><item>Banane</item></items>';
if (!xml_parse($parser, $xmlData, true)) {
throw new RuntimeException(
sprintf(
'XML-Fehler: %s bei Zeile %d',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
)
);
}
} finally {
xml_parser_free($parser);
echo "Parser wurde sicher freigegeben.\n";
}
// Wichtig · Fallstricke
In PHP 8.0.0 und neuer werden XMLParser-Objekte durch die PHP-Garbage-Collection automatisch freigegeben, sobald keine Referenzen mehr darauf bestehen. Der explizite Aufruf von xml_parser_free() ist dennoch empfohlen, da er den Freigabezeitpunkt eindeutig macht und Code lesbarer gestaltet.
In PHP-Versionen vor 8.0.0 war der Parameter eine resource. Wird ein bereits freigegebener Parser erneut an xml_parser_free() übergeben, kann dies zu einem Fehler führen.