Signatur
Beschreibung
xmlwriter_open_memory() initialisiert eine neue XMLWriter-Instanz, deren Ausgabe nicht in eine Datei, sondern in einen internen Speicherpuffer geschrieben wird. Sobald das Schreiben abgeschlossen ist, kann der erzeugte XML-String mit xmlwriter_output_memory() ausgelesen werden.
Diese Funktion eignet sich hervorragend, wenn XML dynamisch generiert und anschließend direkt weitergegeben werden soll – beispielsweise als HTTP-Response-Body, für Weiterverarbeitung im Skript oder zur Speicherung in einer Datenbank, ohne eine temporäre Datei anlegen zu müssen.
Im prozeduralen Stil liefert die Funktion ein XMLWriter-Objekt zurück, das als Ressource für alle weiteren xmlwriter_*-Funktionen verwendet wird. Ab PHP 8.0 ist der prozeduraler Stil ein Wrapper um die objektorientierte XMLWriter-Klasse.
Soll die Ausgabe stattdessen in eine Datei geschrieben werden, ist xmlwriter_open_uri() die geeignete Alternative.
Rückgabewert
XMLWriter-Objekt zurück, das für alle weiteren xmlwriter_*-Aufrufe benötigt wird. Im Fehlerfall wird false zurückgegeben.Beispiele
Einfaches XML-Dokument im Speicher erzeugen
<?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, 'personen');
xmlwriter_start_element($writer, 'person');
xmlwriter_write_element($writer, 'name', 'Max Mustermann');
xmlwriter_write_element($writer, 'alter', '30');
xmlwriter_end_element($writer); // </person>
xmlwriter_end_element($writer); // </personen>
xmlwriter_end_document($writer);
$xml = xmlwriter_output_memory($writer);
echo $xml;
XML als HTTP-Response senden
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'produkte');
$produkte = [
['id' => 1, 'name' => 'Laptop', 'preis' => 999.99],
['id' => 2, 'name' => 'Maus', 'preis' => 19.99],
];
foreach ($produkte as $produkt) {
xmlwriter_start_element($writer, 'produkt');
xmlwriter_write_attribute($writer, 'id', $produkt['id']);
xmlwriter_write_element($writer, 'name', $produkt['name']);
xmlwriter_write_element($writer, 'preis', number_format($produkt['preis'], 2, '.', ''));
xmlwriter_end_element($writer);
}
xmlwriter_end_element($writer); // </produkte>
xmlwriter_end_document($writer);
header('Content-Type: application/xml; charset=UTF-8');
echo xmlwriter_output_memory($writer);
// Wichtig · Fallstricke
Puffer-Verwaltung: xmlwriter_output_memory() leert standardmäßig den internen Puffer nach dem Auslesen ($flush = true). Wird die Funktion mit false aufgerufen, bleibt der Puffer erhalten – das kann bei langen Dokumenten zu erhöhtem Speicherverbrauch führen.
PHP 8.0: Ab PHP 8.0 gibt die Funktion immer ein XMLWriter-Objekt zurück; false wird nur noch bei echten Fehlern geliefert. Der objektorientierte Stil (new XMLWriter() + openMemory()) ist die empfohlene Alternative.
Zeichenkodierung: Sonderzeichen wie <, > und & werden vom XMLWriter automatisch korrekt escaped, sofern die entsprechenden xmlwriter_write_*-Funktionen verwendet werden.