我有一个包含名为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 Parse错误:语法错误,意外&#39;版本&#39;第1行的sitemap.html中的(T_STRING)
正如您所看到的,我使用的是<?xml
而不是<?php
,为什么要尝试将其解析为PHP?
起初,我认为这是造成问题的神奇引语,但当我执行get_magic_quotes_gpc()的var_dump时,我得到bool(false)
所以魔法引用甚至不是
另外,在我的php.ini
中,我发现magic_quotes
是OFF
。
作为修复它的替代方法,我用以下内容替换了第一行:
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
但我仍然对发生的事情感到好奇。
我在同一台服务器上托管了其他网站(PHP版本5.4.45),而且我没有在其他网站的站点地图上获得PHP Parse Error ...
知道可能导致此错误的原因是什么?
答案 0 :(得分:6)
您应该检查short_open_tag
选项。我看到它的方式,PHP将<?
的{{1}}部分视为php开放标记并生成错误。
答案 1 :(得分:2)
如果您要使用PHP进程HTML页面并且它正在其他所有站点上运行,那么您(显然)正在处理难以解决的配置问题。
您可以继续搜索隐藏在服务器某处的short_open_tags
设置,也可以使用PHP回显XML声明。
<?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 opening tags and XML declaration
我更喜欢给所有PHP代码文件添加.php扩展名,因此很清楚它们包含代码而不会产生PHP处理每个HTML文件的开销,但这只是我的看法。
答案 2 :(得分:1)
如上所述,这是由于short_open_tag option
告诉PHP是否应该允许PHP的开放标记的缩写形式(
<? ?>
)。 如果要将PHP与XML结合使用,可以禁用此选项以使用<?xml ?>
内联。否则,您可以使用PHP打印它,例如:<?php echo '<?xml version="1.0"?>'; ?>
。此外,如果禁用,则必须使用PHP开放标记的长格式(<?php ?>
)。