Signatur
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
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;
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";
// 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.