Start · Sprachen · PHP · Referenz · xml_parser_free

xml_parser_free

Funktion

Gibt einen zuvor mit <code>xml_parser_create()</code> erstellten XML-Parser frei und gibt alle damit verbundenen Ressourcen zurück.

seit PHP 4.0.0 Kategorie: xml

Signatur

xml_parser_free(XMLParser $parser): bool

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

Typ
bool
Beschreibung
Gibt 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";
Start-Tag: ROOT Start-Tag: CHILD End-Tag: CHILD End-Tag: ROOT Parser freigegeben.

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";
}
Text: Apfel Text: Banane Parser wurde sicher freigegeben.

// 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.