Start · Sprachen · PHP · Referenz · xmlwriter_open_memory

xmlwriter_open_memory

Funktion

Erzeugt einen neuen <code>XMLWriter</code>, der XML-Ausgaben in den internen Speicher (String-Puffer) schreibt, anstatt in eine Datei.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_open_memory(): XMLWriter|false

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

Typ
XMLWriter|false
Beschreibung
Gibt bei Erfolg ein 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 version="1.0" encoding="UTF-8"?> <personen> <person> <name>Max Mustermann</name> <alter>30</alter> </person> </personen>

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.