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

4

我有两台服务器

服务器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的时间不到一秒钟。

如果我将XML复制到静态文件中,XMLReader会输出该文件。

3个回答

1

你试过添加吗?

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

否则读者会将其视为普通文本而无法工作。尝试在文件开头添加该语句。

0

尝试编写xmlReader在磁盘上读取的任何内容,并检查生成的文件。我有一个预感它要么为空,要么是无效(不完整)的XML。 如果我是正确的,那么您可能会遇到一个比实际浏览器中更快到期的超时。或者是一个需要连接关闭或保持活动的连接(我看到过像这样的服务器崩溃)。

此外,请确保在运行客户端的服务器上没有防火墙,以防止xmlReader无法与xmlWriter通信:) 尝试在服务器控制台中使用iptables -L 来检查任何防火墙规则。


编辑:你可能还需要调用类似 xmlReader->close() 或者 end() 这样的成员函数,来关闭连接并向客户端发送传输结束的信号。


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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接