Domanda

Ho due assistenti

Server A legge http://www.some-url.com/xmlwriter_src. php utilizzando

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

Server B crea un flusso 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 sul server A continua a lamentarsi che il server B doesnt rispondere, anche se posso vedere il risultato XML nel browser.

Ci vuole meno di un secondo per generare

Se copio il codice XML per un file statico, il XmlReader emette il file.

È stato utile?

Soluzione

Per impostazione predefinita, il buffer di writter sarà l'output. Una volta che si è fatto è necessario chiamare 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();

A proposito:  dove si chiude l'elemento record?

Altri suggerimenti

ha fatto u provato ad aggiungere

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

Altrimenti il ??lettore lo considererà come testo semplice e non funzionerà. Provare a dare che all'inizio del file.

Prova scrivere quello xmlReader legge sul disco e controllare il file generato. Ho il sospetto la sua (incompleta) XML vuoto o non valido. Se ho ragione, allora si potrebbe avere un timeout che scade prima di quello che si ottiene in un vero e proprio browser. O che, o una connessione che richiede o connessione chiudere o keepalive (ho visto i server rotti come questo).

Inoltre, assicurarsi che non si dispone di un firewall sul server in cui viene eseguito il client che potrebbero bloccare il xmlReader di parlare con il iptables -L xmlWriter :) Prova nella console del server per verificare eventuali regole del firewall.


Modifica:. Si potrebbe anche avere bisogno di qualcosa come chiamata xmlReader->close(), o end() o qualunque membro lì che chiude la connessione e segnala al cliente che la trasmissione è finita got

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top