服务器A使用xmlreader从服务器B上的xmlwriter读取XML

时间:2010-12-03 16:33:20

标签: php timeout xmlreader xmlwriter

我有两台服务器

服务器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一直在抱怨服务器B没有响应,即使我可以在浏览器中看到xml结果。

生成

需要不到一秒的时间

如果我将xml复制到静态文件,xmlreader将输出该文件。

3 个答案:

答案 0 :(得分:1)

你试过添加

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

否则,读者会将其视为简单文本而无法正常工作。尝试在文件的开头给出它。

答案 1 :(得分:0)

默认情况下,writter会缓冲输出。 一旦完成,你必须调用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();

顺便说一下:  你在哪里关闭记录元素?

答案 2 :(得分:0)

尝试编写磁盘上的任何xmlReader读取并检查生成的文件。我预感它是空的或无效的(不完整的)XML。 如果我是对的,那么你可能会有一个超时,它比你在真正的浏览器中得到的更快到期。要么是那个,要么是需要连接关闭或保持连接的连接(我看过这样的服务器坏了)。

另外,请确保客户端运行的服务器上没有防火墙,这可能会阻止xmlReader与xmlWriter通信:)在服务器控制台中尝试iptables -L以检查任何防火墙规则。


编辑:您可能还需要调用xmlReader->close()end()之类的内容或您在那里关闭连接的任何成员,并通知客户端传输已结束。