2015-08-04 25 views
8

Mam plik danych XML utworzony przy użyciu XMLWriter. Działa bezbłędnie w dev na paczce PHP 5,6. Na żywo serwera, uruchomiony PHP 5.4 kanał nie czynią z komunikatem:Podział wierszy w dokumencie xmlwriter PHP

This page contains the following errors: 

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

Jeżeli zobaczyć źródło to wygląda następująco:

source

Jakoś tam są linie para dodawanych do dokumentu XML. Jedyną różnicą między serwerami jest wersja PHP (o ile wiem).

Oto kilka pierwszych linijek kodu 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')); 

jakieś pomysły jak to obejść?

+2

Nie pochodzi to z kodu, który napisałeś :) - A różnice między dwoma serwerami porównują ustawienia Ini, na przykład dotyczące buforowania danych wyjściowych, plików z wyprzedzeniem itd. Czy masz kod pod kontrolą wersji? ? – hakre

+0

Jeśli generowane pliki XML nie są ogromne, zawsze można umieścić wynik w łańcuchu i przyciąć() przed zapisaniem na dysku. – GordonM

Odpowiedz

11

Sporo zmian od PHP 5.4 do 5.6 ... nie mówiąc już o zmiany w libxml ...

pierwszą rzeczą jest oczywiście upewnić się, nie ma białego przestrzeń przed otwarciem <?php tag lub po znaczniku zamykającym jeśli używany .

Pomógłbyś, gdybyś mógł określić, kiedy nowe linie zostaną wprowadzone (zakładając, że są to nowe linie ... czy użyłeś czegoś w rodzaju przeglądarki heksadecymalnej?). Spróbuj napisać do lokalizacji tymczasowej - chcesz ustalić, czy ma to miejsce podczas wyświetlania strony lub podczas wysyłania xmlWriter.

Rzeczy, które przychodzą na myśl ...

  • Może być jawne o co indetString powinno być. $xml->setIndentString(" ");

  • Domyślne kodowanie ...? Może spróbuj zdobyć ten zestaw. Spodziewaliby się otwarcia tagu xml ... encoding="UTF-8". Użyj numeru startDocument('1.0', 'utf-8'); i prawdopodobnie powinien on wysyłać nagłówek taki jak: header('Content-Type: application/xml; charset=UTF-8');. Czy Twój numer telefonu to default_charset UTF-8?

  • Jakie inne różnice między tymi dwoma środowiskami? Rzeczy takie jak short_open_tag itp.

    • LIBXML_HTML_NOIMPLIED? Zmieniono około 5.4?

Obejście:

  • Spróbuj zadzwonić ob_clean przed rozpoczęciem pisania do strumienia wyjściowego.

  • Użyj trim.

  • Uaktualnij serwer, który chce być na 5.4 te dni :)

+0

Wypróbowany WSZYSTKO! Ale prosty "ob_clean()" zrobił cud! Dziękuję Ci. – Daria

1

Twoim problemem jest umieszczenie nagłówka ("Content-type: text/xml");

Spróbuj i upewnij się, że nic nie przychodzi przed header() wywołanie:

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

... 

?> 

Chyba to może Ci pomóc!