PHP xmlWriter resultaten naar log schrijven

Een bestaande applicatie die een XML export doet met XMLWriter moest voorzien worden van een mogelijkheid om de exacte XML output weg te schrijven in een log. Het script maakte in eerste instantie gebruik van directe output naar de browser:

$xml->openURI('php://output');

Om het totale resultaat van de XML output in een logfile te schrijven was dit niet ideaal. Het zou op zich wel kunnen maar omzetten naar gebruik van het geheugen voor opslag van de XML was iets handiger (zeker omdat het om relatief weinig data per run ging).

Hieronder de code voor een basis XML die zowel naar de browser gaat als naar een logfile:

// Set correct header
header('Content-Type: application/xml, charset=utf-8');

// Initiate XMLWriter
$xml = new XMLWriter();

// Create new xmlwriter using memory for string output
$xml->openMemory();

// Create document tag
$xml->startDocument('1.0', 'UTF-8');

// Create start element tag
$xml->startElement('test');

//  Write full element tag
$xml->writeElement('value', 'testwaarde');

// End current element
$xml->endElement();

// End current document
$xml->endDocument();

// Define logfile name
$filename = '/logs/' . date('Ymd_hm') . '.xml';

// Open file
$fp = fopen($filename, "w");

// Write memory output to file. The false boolean is to
// prevent XMLWriter from flushing the current buffer
fwrite($fp, $xml->outputMemory(false));

// Close the file
fclose($fp);

// Return the current buffer
echo $xml->outputMemory();

Dit is een redelijk kort samengevat voorbeeld en het kan altijd beter, netter en leuker maar het idee is duidelijk.

Geef een reactie

Jouw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *