4

私は2つのサーバーを持っています

サーバーAはhttp://www.some-url.com/xmlwriter_src.phpを使用して読み取ります

$reader = new XMLReader();
$reader->open('http://www.some-url.com/xmlwriter_src.php');
while ($reader->read()) 
{
  /* -- do something -- */
}

サーバーBはxmlストリームを作成します

$writer = new XMLWriter();
$writer->openURI('php://output');
$writer->startDocument("1.0");

$writer->startElement("records");
while(!$recordset->EOF)
{
  $writer->startElement($fieldname) 
  $writer->text($recordset->fields[$fieldname]);
  $writer->endElement();
  $recordset->movenext();
}

サーバーAのxmlreaderは、ブラウザーでxmlの結果を確認できたとしても、サーバーBが応答しないと文句を言い続けます。

生成するのに1秒もかかりません

xmlを静的ファイルにコピーすると、xmlreaderがファイルを出力します。

4

3 に答える 3

1

追加してみましたか

header("Content-Type: text/xml");

そうしないと、読者はそれを単純なテキストと見なし、機能しません。ファイルの先頭にそれを指定してみてください。

于 2010-12-11T14:03:52.110 に答える
0

xmlReader が読み取ったものをディスクに書き込んで、生成されたファイルを調べます。空または無効な(不完全な)XMLのどちらかだと思います。私が正しければ、実際のブラウザよりも早く期限切れになるタイムアウトが発生する可能性があります。それか、接続を閉じるかキープアライブを必要とする接続のいずれかです(このようにサーバーが壊れているのを見たことがあります)。

また、クライアントが実行されているサーバーに、xmlReader が xmlWriter と通信するのをブロックする可能性のあるファイアウォールがないことを確認してください:)iptables -Lサーバー コンソールでファイアウォール ルールを確認してみてください。


編集: xmlReader->close()、またはend()接続を閉じて送信が終了したことをクライアントに通知する、そこにあるメンバーを呼び出す必要がある場合もあります。

于 2010-12-14T13:18:16.267 に答える
0

デフォルトでは、ライターは出力をバッファリングします。完了したら、flush() を呼び出す必要があります。

$writer = new XMLWriter();
$writer->openURI('php://output');
$writer->startDocument("1.0");

$writer->startElement("records");
while(!$recordset->EOF)
{
  $writer->startElement($fieldname) 
  $writer->text($recordset->fields[$fieldname]);
  $writer->endElement();
  $recordset->movenext();
}
$writer->flush();

ところで、records 要素はどこで閉じますか?

于 2010-12-14T13:07:20.963 に答える