xml и 500 error

В процессе создания одного портала, столкнулся с интересной бедой, которая выпала на мой сервер неожиданно. Когда создали sitemap.xml, оказалось что никому этот файл не доступен, хотя и присутствует на сервере. Сервер отвечал браузеру 500 ошибкой (Error) ссылаясь на какой-то дикий допотопный баг Netscape. Очень долго думая, я пришел к выводу что проблема все-таки не в сервере Apache, а проблема в интерпретаторе xml. В файле mod_php.conf я не обнаружил записи xml, и быстро это исправил.

Однако, не тут то было, даже с этой записью вылетала 500 ошибка…. В интернете информации не было, пришлось включать все возможные логи, чтобы докопаться до сути. В итоге в логе php, была найдена ошибка syntax error unexpected t_string для файла xml в первой строке. Пошарив в гугле, обнаружил что такая беда случается, если включена опция short_tags в настройках php. Так как, в этом случае php являсь обработчиком xml, думает что строка

<?xml version="1.0" encoding="UTF-8"?>

Является скриптом php, а не разметкой xml. Решение проблемы может быть разным. Отключить short_tags, но тогда некоторые движки с корявым кодингом будут сыпать ошибками.

При включенном short_tags можно решить проблему написав вместо

<?xml version=»1.0″?>

так:

<<?= ‘?’; ?>xml version=»1.0″<?= ‘?’; ?>>

Однако, есть более простое решение проблемы. Отправлять заголово с помощью php:

<?php
header("Content-Type: application/xml");
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>

можно даже rewrite правило написать…. если хочется.

Ответить на sp1ker ¬
Отменить ответ


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>