Start · Sprachen · PHP · Referenz · xmlwriter_open_uri

xmlwriter_open_uri

Funktion

Erzeugt einen neuen <code>XMLWriter</code>, der seine Ausgabe in eine URI (Datei oder Stream) schreibt.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_open_uri(string $uri): XMLWriter|false

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

Typ
XMLWriter|false
Beschreibung
Gibt bei Erfolg ein 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 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);
<?xml version="1.0" encoding="UTF-8"?> <katalog> <produkt id="1"> <name>Laptop</name> <preis>999.99</preis> </produkt> <produkt id="2"> <name>Maus</name> <preis>19.99</preis> </produkt> </katalog>

// 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.