是否可以使用php://temp包装器生成XMLWriter的XML文件?我喜欢它提供的功能(小文件的内存,更大输出的透明临时文件)但我无法获得语法(如果它甚至可能):
<?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();
答案 0 :(得分:1)
我不明白写入临时文件的目的。也许你想要:
$oXMLWriter->openURI('php://output');
我从未使用XMLWriter
,但它似乎没有处理文件指针。我认为这就是你想要的。
对于咯咯笑,这是包装临时界面的东西:
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();
现在你可以得到文件指针:
$fp = WeirdStream::$files['a'];
它可能纯粹是在内存中,也可能是磁盘上的临时文件。
然后,您可以逐行遍历数据:
fseek($fp, 0, SEEK_SET);
while (!feof($fp)) $line = fgets($fp);
但这对我来说非常奇怪。
答案 1 :(得分:0)
您最终需要对php://temp
的内容做些什么?如果您只需要一个临时的仅限内存的存储空间,则可以使用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 ();