2

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();
4

2 に答える 2

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'];

純粋にメモリ内にある場合もあれば、ディスク上の一時ファイルである場合もあります。

次に、データを1行ずつループします。

fseek($fp, 0, SEEK_SET);
while (!feof($fp)) $line = fgets($fp);

しかし、これはすべて私には非常に奇妙です。

于 2011-06-16T08:32:10.503 に答える
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 ();
于 2011-06-16T08:34:16.773 に答える