В процессе создания одного портала, столкнулся с интересной бедой, которая выпала на мой сервер неожиданно. Когда создали 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 правило написать…. если хочется.
Ссылки которые мн помогли:
http://www.justskins.com/forums/short-tags-and-xml-26188.html
http://codingforums.com/showthread.php?t=124868