PHP выдает ошибку при открытии тега XML

У меня есть файл, который включает в себя файл с именем sitemap.html и в карте сайта у меня есть следующий код:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc><?php echo SITE_URL . '/'; ?></loc>
<changefreq>monthly</changefreq>
<priority>1.00</priority>
</url>

<?php foreach ($this->data->content as $content): ?>
<url>
<loc><?php echo SITE_URL . $content->permalink; ?></loc>
<lastmod><?php echo date("Y-m-d", $content->publish_date); ?></lastmod>
<changefreq>monthly</changefreq>
<priority><?php echo $content->sitemap_index; ?></priority>
</url>
<?php endforeach; ?>
</urlset>

Все вроде бы хорошо, но я получаю ошибку 500, которая говорит:

Ошибка синтаксического анализа PHP: синтаксическая ошибка, непредвиденная ‘версия’ (T_STRING) в файле sitemap.html в строке 1

Как видите, я использую <?xml и не <?php так почему он пытается разобрать его как PHP?

Сначала я думал, что это были магические кавычки, которые вызывают проблему, но когда я делаю var_dump get_magic_quotes_gpc (), я получил bool(false) поэтому магические цитаты даже не включены.

Кроме того, по моему php.ini, Я вижу это magic_quotes является OFF,

В качестве альтернативы, чтобы исправить это, я заменил мою первую строку следующим:

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>

Но мне все еще интересно, что происходит.

У меня есть другие веб-сайты, размещенные на том же сервере (версия PHP 5.4.45), и я не получаю ошибку синтаксического анализа PHP на карте сайта других сайтов …

Есть идеи, что может быть причиной этой ошибки?

6

Решение

Вы должны проверить short_open_tag вариант. Как я это вижу, PHP видит <? часть вашего <?xml как открытый тег php и генерирует ошибку.

6

Другие решения

Если вы хотите, чтобы PHP обрабатывал HTML-страницы и работал на каждом другом сайте, то вы (очевидно) сталкиваетесь с трудной для устранения проблем конфигурацией.

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

<?php echo '<?xml version="1.0" encoding="UTF-8" ?>' ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc><?php echo SITE_URL . '/'; ?></loc>
<changefreq>monthly</changefreq>
<priority>1.00</priority>
</url>

<?php foreach ($this->data->content as $content): ?>
<url>
<loc><?php echo SITE_URL . $content->permalink; ?></loc>
<lastmod><?php echo date("Y-m-d", $content->publish_date); ?></lastmod>
<changefreq>monthly</changefreq>
<priority><?php echo $content->sitemap_index; ?></priority>
</url>
<?php endforeach; ?>
</urlset>

Вот старая страница по теме:
Открывающие теги PHP и декларация XML

Я предпочитаю давать всем файлам кода PHP расширение .php, поэтому совершенно очевидно, что они содержат код и не требуют дополнительных затрат на обработку PHP каждого файла HTML, но это только мое мнение.

2

Как уже упоминалось, это связано с опция short_open_tag

Говорит ли PHP краткую форму (<? ?>) открытого тега PHP должно быть разрешено. Если вы хотите использовать PHP в сочетании с XML, вы можете отключить эту опцию, чтобы использовать <?xml ?> в соответствии. В противном случае вы можете распечатать его на PHP, например: <?php echo '<?xml version="1.0"?>'; ?>, Также, если отключено, вы должны использовать длинную форму открытого тега PHP (<?php ?>).

1
По вопросам рекламы [email protected]