Start · Sprachen · PHP · Referenz · xmlwriter_output_memory

xmlwriter_output_memory

Funktion

Gibt den aktuellen Inhalt des internen XML-Puffers als String zurück und leert diesen optional.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_output_memory(XMLWriter $writer, bool $flush = true): string

Beschreibung

xmlwriter_output_memory() liest den bisher generierten XML-Inhalt aus dem internen Speicher-Puffer des XMLWriter-Objekts aus und gibt ihn als String zurück. Die Funktion wird typischerweise verwendet, wenn ein XMLWriter mit xmlwriter_open_memory() initialisiert wurde, also der erzeugte XML-Code nicht in eine Datei, sondern direkt in den Arbeitsspeicher geschrieben werden soll.

Der optionale Parameter flush steuert, ob der Puffer nach dem Auslesen geleert wird. Ist er true (Standard), wird der Puffer zurückgesetzt, sodass nachfolgende Schreiboperationen einen neuen, leeren Puffer befüllen. Ist er false, bleibt der bisherige Inhalt erhalten und wird beim nächsten Aufruf erneut zurückgegeben – der neue Inhalt wird dann angehängt.

Typischer Einsatzfall ist das Generieren von XML-Dokumenten oder -Fragmenten im laufenden Betrieb, die anschließend z. B. als HTTP-Response an einen Client gesendet, in einer Datenbank gespeichert oder weiterverarbeitet werden sollen – ohne den Umweg über temporäre Dateien.

Die prozedurale Variante xmlwriter_output_memory() und die objektorientierte Methode XMLWriter::outputMemory() sind funktional identisch.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Das XMLWriter-Objekt, dessen Puffer ausgelesen werden soll. Muss zuvor mit xmlwriter_open_memory() erzeugt worden sein.
$flush bool true Gibt an, ob der interne Puffer nach dem Auslesen geleert werden soll. Bei true (Standard) wird der Puffer zurückgesetzt; bei false bleibt der bisherige Inhalt erhalten.

Rückgabewert

Typ
string
Beschreibung
Gibt den aktuell im Puffer gespeicherten XML-Inhalt als String zurück. Ist der Puffer leer, wird ein leerer String zurückgegeben.

Beispiele

Einfaches XML-Dokument im Speicher erzeugen und ausgeben

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, '    ');

xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'bücher');

xmlwriter_start_element($writer, 'buch');
xmlwriter_write_attribute($writer, 'id', '1');
xmlwriter_write_element($writer, 'titel', 'PHP Professionell');
xmlwriter_write_element($writer, 'autor', 'Max Mustermann');
xmlwriter_end_element($writer);

xmlwriter_end_element($writer);
xmlwriter_end_document($writer);

$xml = xmlwriter_output_memory($writer);
echo $xml;
<?xml version="1.0" encoding="UTF-8"?> <bücher> <buch id="1"> <titel>PHP Professionell</titel> <autor>Max Mustermann</autor> </buch> </bücher>

Puffer schrittweise auslesen ohne zu leeren

<?php
$writer = xmlwriter_open_memory();
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'root');
xmlwriter_write_element($writer, 'item', 'Erster Eintrag');

// Puffer auslesen, aber NICHT leeren
$teil1 = xmlwriter_output_memory($writer, false);
echo "Teil 1:\n" . $teil1 . "\n";

xmlwriter_write_element($writer, 'item', 'Zweiter Eintrag');
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);

// Puffer erneut auslesen (enthält GESAMTEN bisherigen Inhalt)
$gesamt = xmlwriter_output_memory($writer, true);
echo "Gesamt:\n" . $gesamt . "\n";
Teil 1: <?xml version="1.0" encoding="UTF-8"?> <root><item>Erster Eintrag</item> Gesamt: <?xml version="1.0" encoding="UTF-8"?> <root><item>Erster Eintrag</item><item>Zweiter Eintrag</item></root>

// Wichtig · Fallstricke

Wichtig: xmlwriter_output_memory() funktioniert nur, wenn der XMLWriter mit xmlwriter_open_memory() geöffnet wurde. Bei einem mit xmlwriter_open_uri() erstellten Writer, der direkt in eine Datei oder URI schreibt, liefert die Funktion immer einen leeren String.

Wird flush auf false gesetzt und die Funktion mehrfach aufgerufen, wächst der zurückgegebene String mit jeder Schreiboperation – der Puffer kumuliert den gesamten bisher generierten Inhalt. Dies kann bei sehr großen XML-Dokumenten zu erhöhtem Speicherverbrauch führen.

Die objektorientierte Entsprechung lautet XMLWriter::outputMemory(bool $flush = true): string und verhält sich identisch.