Используйте оболочку php: // temp с XMLWriter - PullRequest
2 голосов
/ 16 июня 2011

Можно ли использовать оболочку php: // temp для создания XML-файла с XMLWriter ?Мне нравятся предоставляемые им функции (память для небольших файлов, прозрачный временный файл для больших выходных данных), но я не могу получить синтаксис (если это возможно):

<?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 ]

1 голос
/ 16 июня 2011

Я не понимаю цели записи во временный файл.Возможно, вы хотите:

$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);

Но это все оченьстранно для меня.

0 голосов
/ 16 июня 2011

Что вам нужно сделать с содержимым 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 ();
...