使用带有XMLWriter的php:// temp包装器

时间:2011-06-16 08:27:06

标签: php wrapper xmlwriter

是否可以使用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();

2 个答案:

答案 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 ();