Usa php: // wrapper temp con xmlwriter
Domanda
È possibile utilizzare il php: // temp wrapper per generare un file XML con Xmlwriter? Mi piacciono le funzionalità che fornisce (memoria per piccoli file, file temporaneo trasparente per un output più grande) ma non riesco a ottenere la sintassi (se è anche possibile):
<?php
header('Content-type: text/xml; charset=UTF-8');
$oXMLWriter = new XMLWriter;
$oXMLWriter->openURI('php://temp');
$oXMLWriter->startDocument('1.0', 'UTF-8');
$oXMLWriter->startElement('test');
$oXMLWriter->text('Hello, World!');
$oXMLWriter->endElement();
$oXMLWriter->endDocument();
// And now? *******
$oXMLWriter->flush();
Soluzione
Non capisco lo scopo di scrivere in un file di temperatura. Forse vuoi:
$oXMLWriter->openURI('php://output');
Non ho mai usato XMLWriter
Ma non sembra prendere un manico per un puntatore del file. Penso che sia davvero quello che vuoi.
Per le risatine, ecco qualcosa che avvolge l'interfaccia temporanea:
class WeirdStream
{
static public $files = array();
private $fp;
public function stream_open($path)
{
$url = parse_url($path);
self::$files[$url['host']] = fopen('php://temp', 'rw');
$this->fp = &self::$files[$url['host']];
return true;
}
public function stream_write($data)
{
return fwrite($this->fp, $data);
}
}
stream_wrapper_register('weird', 'WeirdStream');
$oXMLWriter = new XMLWriter;
$oXMLWriter->openURI('weird://a');
// .. do stuff
$oXMLWriter->flush();
Ora puoi arrivare al puntatore del file:
$fp = WeirdStream::$files['a'];
Può essere puramente in memoria o può essere un file temporaneo sul disco.
È quindi possibile eseguire il lancio attraverso la riga di dati per riga:
fseek($fp, 0, SEEK_SET);
while (!feof($fp)) $line = fgets($fp);
Ma questo è tutto molto strano per me.
Altri suggerimenti
Cosa devi fare con il contenuto di php://temp
infine? Se hai solo bisogno di un'archiviazione temporanea, solo memoria, puoi utilizzare openMemory()
:
$oXMLWriter = new XMLWriter;
$oXMLWriter->openMemory();
$oXMLWriter->startDocument('1.0', 'UTF-8');
$oXMLWriter->startElement('test');
$oXMLWriter->text('Hello, World!');
$oXMLWriter->endElement();
$oXMLWriter->endDocument();
echo $oXMLWriter->outputMemory ();