Невозможно экспортировать XML из PHP с помощью WAMPServer

Я использую WAMPServer 2.1 на своей локальной машине. Я пытаюсь создать простой PHP-скрипт для вывода XML-файла. Я не могу заставить его работать без ошибки в IE и Chrome. В Firefox 4 это работает.

Вот PHP:

<?php

main();

function main()
{
    header("Content-type: application/xml");
    OutputXML('xml/login_user_good.xml');
    exit(0);
}

function OutputXML($filename)
{
    echo file_get_contents($filename);
}

?>

Вот XML-файл:

<?xml version="1.0" encoding="utf-8" ?>
<login_user>
    <result_code value="1"/>
    <error value="Invalid username or password"/>
</login_user>

Когда я попытался получить доступ к своему PHP-скрипту с помощью IE 8, я получаю эту ошибку:

The XML page cannot be displayed  Cannot view XML input using style sheet.
Please correct the error and then click the Refresh button, or try again later. 
--------------------------------------------------------------------------------
Invalid at the top level of the document. Error processing resource
'http://localhost/kiamobile/login_user.php'. Line 1, P...

<?xml version="1.0" encoding="utf-8" ?> 
^

В Google Chrome 10 я получаю эту ошибку:

This page contains the following errors:

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

В Firefox 4 я получаю правильно отформатированный вывод XML.

В любом из браузеров, когда я просматриваю исходный код, я вижу правильный XML.

Я пробовал с явным заголовком и без него. Если я удалю вызов функции PHP header(), я получу следующие результаты:

  • IE 8: та же ошибка, что и раньше
  • Firefox 4: пустой экран
  • Chrome 10: пустой экран

Опять же, если я просматриваю исходный код в любом из браузеров, я вижу XML. Я пробовал использовать text/html вместо application/xml, но безрезультатно.

Я попытался сгенерировать XML непосредственно в коде PHP, например:

<?php

main();

function main()
{
    header("Content-type: application/xml");
    OutputXML();
    exit(0);
}

function OutputXML()
{
echo <<<END
<?xml version="1.0" encoding="utf-8" ?>
<login_user>
    <result_code value="1"/>
    <error value="Invalid username or password"/>
</login_user>
END;

}

?>

Когда я это делаю, я получаю следующие результаты:

  • IE 8: та же ошибка
  • Firefox 4: я вижу отформатированный XML
  • Chrome 10: пустой экран

Что я делаю неправильно?


person elmonty    schedule 18.04.2011    source источник


Ответы (2)


Ваш скрипт может содержать нежелательные и невидимые символы (например, BOM) перед начальным тегом PHP.

person Bil    schedule 18.04.2011

Браузеры не предназначены для отображения любого произвольного XML. Им нравится HTML (который может быть XHTML). Непонятно, почему вы хотите, чтобы браузеры отображали их. Если он предназначен для пользователя и , вы должны отформатировать его в HTML, если он предназначен для API (сервиса), проверьте его с помощью curl/wget/etc, и я уверен, что XML будет выглядеть одинаково каждый раз.

person Zepplock    schedule 18.04.2011