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