2010-12-03 1 views
4

У меня есть два сервераСервер с помощью XmlReader для чтения XML с XmlWriter на сервере B

Сервер читает 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(); 
} 

xmlreader на сервере A продолжает жаловаться, что сервер B не отвечает, даже th Я могу увидеть результат xml в браузере.

Она занимает меньше секунды, чтобы произвести

Если я скопировать XML в статический файл, то XmlReader выводит файл.

ответ

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

Кстати: где вы закрыть элемент записей?

+0

ну его здесь не показано, но он находится в исходном коде – user326096 2010-12-15 15:23:43

1

сделал и попытался добавить

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

Else читатель будет рассматривать его как простой текст и не будет работать. Попробуйте дать это в начале файла.

0

Попробуйте записать любой файл xmlReader на диск и проверить сгенерированный файл. У меня есть догадка его либо пустой, либо недопустимый (неполный) XML. Если я прав, тогда у вас может быть тайм-аут, срок действия которого истекает раньше, чем тот, который вы получаете в реальном браузере. Либо это, либо соединение, для которого требуется либо соединение-закрыть, либо keepalive (я видел, как серверы сломались так).

Кроме того, убедитесь, что у вас нет брандмауэра на сервере, на котором работает клиент, который может заблокировать xmlReader от разговора с xmlWriter. Попробуйте iptables -L в консоли сервера, чтобы проверить любые правила брандмауэра.


Edit: вы можете также нужно вызвать что-то вроде xmlReader->close(), или end() или любой другой член вы туда попали, что закрывает соединение и сигнализирует клиенту, что передача закончилась.