PHP打开标记

时间:2016-10-13 19:13:13

标签: php php-parse-error

我有一个包含名为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_quotesOFF

作为修复它的替代方法,我用以下内容替换了第一行:

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

但我仍然对发生的事情感到好奇。

我在同一台服务器上托管了其他网站(PHP版本5.4.45),而且我没有在其他网站的站点地图上获得PHP Parse Error ...

知道可能导致此错误的原因是什么?

3 个答案:

答案 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 ?>)。