Signatur
Beschreibung
xmlwriter_open_uri() initialisiert einen neuen XMLWriter-Kontext und verknüpft ihn mit der angegebenen URI. Die erzeugte XML-Ausgabe wird direkt in die Datei oder den Stream geschrieben, der durch die URI angegeben wird – im Gegensatz zu xmlwriter_open_memory(), bei dem die Ausgabe im Arbeitsspeicher gehalten wird.
Als URI kann ein einfacher Dateipfad (z. B. /var/www/output.xml) oder ein Stream-Wrapper-Pfad (z. B. php://output) angegeben werden. Dies macht die Funktion besonders geeignet, wenn große XML-Dokumente erzeugt werden sollen und ein vollständiges Einlesen in den Speicher nicht wünschenswert ist.
Der zurückgegebene XMLWriter-Kontext wird anschließend an alle weiteren xmlwriter_*-Funktionen übergeben, die das Dokument aufbauen. Nach Abschluss sollte xmlwriter_end_document() aufgerufen und der Kontext freigegeben werden, damit alle gepufferten Daten korrekt in die Zieldatei geschrieben werden.
Seit PHP 8.0 gibt die Funktion ein XMLWriter-Objekt zurück (objektorientierter Stil möglich); zuvor war der Rückgabewert eine Ressource. Im prozeduralen Stil ändert sich die Verwendung dadurch kaum, da das Objekt weiterhin an die xmlwriter_*-Funktionen übergeben werden kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $uri Pflicht | string | Ziel-URI, in die die XML-Ausgabe geschrieben wird. Kann ein Dateipfad ('/pfad/zur/datei.xml') oder ein Stream-Wrapper ('php://output') sein. |
Rückgabewert
XMLWriter-Objekt zurück (vor PHP 8.0: eine Ressource), das als Kontext für alle weiteren xmlwriter_*-Funktionen dient. Im Fehlerfall (z. B. wenn die Datei nicht geöffnet werden kann) wird false zurückgegeben.Beispiele
XML-Dokument direkt in eine Datei schreiben
<?php
$xw = xmlwriter_open_uri('/tmp/ausgabe.xml');
if ($xw === false) {
die('Fehler: Datei konnte nicht geöffnet werden.');
}
xmlwriter_set_indent($xw, true);
xmlwriter_set_indent_string($xw, ' ');
xmlwriter_start_document($xw, '1.0', 'UTF-8');
xmlwriter_start_element($xw, 'buecher');
xmlwriter_start_element($xw, 'buch');
xmlwriter_write_attribute($xw, 'isbn', '978-3-86490-500-0');
xmlwriter_write_element($xw, 'titel', 'PHP für Profis');
xmlwriter_write_element($xw, 'autor', 'Max Mustermann');
xmlwriter_end_element($xw); // buch
xmlwriter_end_element($xw); // buecher
xmlwriter_end_document($xw);
echo 'XML wurde erfolgreich in /tmp/ausgabe.xml geschrieben.';
XML direkt in den Browser-Output streamen
<?php
header('Content-Type: application/xml; charset=UTF-8');
$xw = xmlwriter_open_uri('php://output');
xmlwriter_set_indent($xw, true);
xmlwriter_set_indent_string($xw, ' ');
xmlwriter_start_document($xw, '1.0', 'UTF-8');
xmlwriter_start_element($xw, 'katalog');
$produkte = [
['id' => 1, 'name' => 'Laptop', 'preis' => 999.99],
['id' => 2, 'name' => 'Maus', 'preis' => 19.99],
];
foreach ($produkte as $produkt) {
xmlwriter_start_element($xw, 'produkt');
xmlwriter_write_attribute($xw, 'id', $produkt['id']);
xmlwriter_write_element($xw, 'name', $produkt['name']);
xmlwriter_write_element($xw, 'preis', number_format($produkt['preis'], 2, '.', ''));
xmlwriter_end_element($xw);
}
xmlwriter_end_element($xw); // katalog
xmlwriter_end_document($xw);
// Wichtig · Fallstricke
Schreibrechte beachten: Der PHP-Prozess muss Schreibrechte auf die Zieldatei besitzen. Andernfalls gibt die Funktion false zurück, ohne eine E_WARNING auszulösen – daher immer den Rückgabewert prüfen.
Pufferverhalten: Die Ausgabe kann intern gepuffert werden. Um sicherzustellen, dass alle Daten tatsächlich in die Datei geschrieben werden, muss xmlwriter_end_document() aufgerufen werden, bevor der Kontext aufgegeben wird.
PHP 8.0: Vor PHP 8.0 wurde eine Ressource zurückgegeben. Ab PHP 8.0 ist der Rückgabewert ein XMLWriter-Objekt. Der prozedurale Aufrufstil bleibt dabei weiterhin gültig.
Große Dokumente: xmlwriter_open_uri() ist gegenüber xmlwriter_open_memory() vorzuziehen, wenn sehr große XML-Dokumente generiert werden, da der Speicherverbrauch deutlich geringer ausfällt.