2015-08-04 14 views
8

Ho un feed XML che ho creato utilizzando XMLWriter. Funziona perfettamente in dev su un box vagabondo PHP 5.6. Sul server di vivere, in esecuzione di PHP 5.4 feed non riesce a rendere con un messaggio:Interruzioni di riga nel documento XML xmlwriter

This page contains the following errors: 

error on line 3 at column 6: XML declaration allowed only at the start of the document 

Se si visualizza sorgente che assomiglia a questo:

source

In qualche modo ci sono un paio di linee che viene aggiunto nel documento XML. L'unica differenza tra i server è la versione di PHP (per quanto ne so).

Ecco le prime righe del codice XMLWriter:

$xml = new XMLWriter(); 
$xml->openURI('php://output'); 
$xml->startDocument("1.0"); 
$xml->setIndent(true); 
$xml->startElement("propertyList"); 
$xml->writeAttribute('date', date('Y-m-d-H:i:s')); 

Delle idee come ottenere intorno a questo?

+2

Non è dal codice che hai postato :) - E per le differenze tra i due server confrontare le impostazioni ini, ad esempio quelle sul buffer di output, anteporre i file ecc. E hai il codice sotto controllo di versione ? – hakre

+0

Se i file XML che stai generando non sono enormi, puoi sempre mettere l'output in una stringa e tagliare() prima di salvarlo sul disco. – GordonM

risposta

11

un bel paio di modifiche da PHP 5.4 a 5.6 ... tralasciando i cambiamenti in libxml ...

prima cosa è ovviamente assicurarsi che non v'è alcun spazio bianco prima di aprire <?php tag o dopo un tag di chiusura, se usato .

Sarebbe di grande aiuto se fosse possibile determinare quando vengono introdotte le nuove linee (supponendo che siano nuove linee ... hai usato qualcosa come un visualizzatore esadecimale?). Prova a scrivere in una posizione temporanea - vuoi determinare se questo si verifica quando servi la pagina o quando xmlWriter sta emettendo.

cose che vengono in mente ...

  • forse esplicito su quello che dovrebbe essere il indetString. $xml->setIndentString(" ");

  • Codifica predefinita ...? Forse provi a prendere quel set. Ci si aspetta di aprire il tag xml ... encoding="UTF-8". Utilizzare startDocument('1.0', 'utf-8'); e probabilmente dovrebbe inviare l'intestazione come: header('Content-Type: application/xml; charset=UTF-8');. Il tuo default_charset UTF-8?

  • Quali altre differenze tra i due ambienti? Cose come short_open_tag ecc.

    • LIBXML_HTML_NOIMPLIED? Cambiato intorno a 5.4?

Soluzione:

  • effettuare una chiamata vocale ob_clean prima di iniziare a scrivere nel flusso di output.

  • Utilizzare trim.

  • Aggiornamento del server, che desidera essere in 5.4 in questi giorni :)

+0

A provato TUTTO! Ma semplice 'ob_clean()' ha fatto un miracolo! Grazie. – Daria

1

Il problema è il posizionamento dell'intestazione ("Tipo di contenuto: testo/xml");

Prova questo e assicurarsi che nulla viene prima l'intestazione() chiamata:

<?php 
header('Content-type: text/xml'); 

... 

?> 

Credo che questo potrebbe aiutare!

Problemi correlati