【问题标题】:PHP error in .xml file?.xml 文件中的 PHP 错误?
【发布时间】:2009-04-01 16:25:08
【问题描述】:

好的,首先,我将这一行添加到我的 .htaccess 文件中,以便 php 引擎解析 .xml 文件中的 php 代码:

AddType application/x-httpd-php .php .php3 .phtml .html .xml

之后,当我查看 .xml 文件时,我得到了这个 PHP 错误:

解析错误:解析错误,第 1 行 /var/www/vhosts/mydomain.com/httpdocs/test.xml 中出现意外的 T_STRING

但是第 1 行甚至不是 php 事实上这是第 1 行:

<?xml version="1.0" encoding="utf-8"?>

谁能告诉我问题出在哪里?

谢谢。

【问题讨论】:

    标签: php xml .htaccess


    【解决方案1】:

    那是因为&lt;? 是 php 的短开始标签。

    试试&lt;?php echo '&lt;?xml version="1.0" encoding="utf-8"?&gt;'; ?&gt;

    【讨论】:

    • 这个解决方案我也遇到了问题 - 你可能需要做&lt;?php echo '&lt;' . '?xml version="1.0" encoding="utf-8" ?' . '&gt;'; ?&gt;
    • pix0r 说了什么。 Apikot 的答案的问题是字符串中出现的 '?>' 序列,而在 PHP 中,字符 '?>' 甚至不应该出现在字符串中。
    • ...有趣的是,PHP 自己的解析器可以容忍它。我避免它的原因是语法高亮文本编辑器或 IDE 通常不会。
    • 根据我的经验,php 对字符串中的 '?>' 没有任何问题。请详细说明一下?
    【解决方案2】:

    是的,可悲但真实的是,文档类型被视为 PHP 开头的短标记。您有几个选择:

    1. 将 XML 从文件列表中取出,以便 PHP 在 .htaccess 文件中解析
    2. 在 PHP 中包装所有的 xml 声明:

      &lt;?php print('&lt;?xml version="1.0" encoding="utf-8"?&gt;'); ?&gt;

    3. 在 .htaccess 或 php.ini 中关闭 short_open_tag。这意味着 PHP 将只接受 &lt;?php 作为开始标签,而忽略 &lt;?

    【讨论】:

    • 如果您希望 XML 文件即使在其中包含 PHP 也保持格式良好的 XML,请隐藏关闭的“?>”。例如。 print('');
    • 这真的会让它在服务器端保持有效的 XML 文档吗?我不认为将 PHP 开放标签作为第一个可行的角色可以完成这项工作。我认为,如果您采用这种方法,则无法使其成为服务器上的有效 XML 文档……仅在输出时。
    • 是的,长格式的 PHP 开放标签会生成 XML 处理指令。在根 documentElement 之外有一个 PI(或评论)是非常有效的。
    • (尝试使 PHP 文件也具有格式良好的 XML 时遇到的主要问题是提出了将内容插入属性值和可选包含属性的替代方法,因为您不能将 PI 放入其中一个元素或属性。)
    【解决方案3】:

    替代方案 4,除了 daniel 的:完全删除 声明。

    由于“1.0”和“utf-8”是 XML 的默认值,它完全是多余的;包括这里的 XML 声明对你没有任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多