【问题标题】:XML header causes server error 500 (even when commented out!)XML 标头导致服务器错误 500(即使已注释掉!)
【发布时间】:2014-02-10 13:21:30
【问题描述】:

我刚刚花了几个小时来寻找我遇到的最奇怪的错误之一。我编写了一些 Javascript 代码,它可以动态生成一些 XML 并将其发送到运行 Apache 和 PHP 的服务器。

js代码sn-p为:

<script>
function dummy() {
var str2 = '<?xml version="1.0" ?>';

...  add a bit more XML then send to server
}
</script>

在我运行 WAMP 的桌面上,它运行得很好。当我将其传输到运行 LAMP 的 Raspberry Pi 时,服务器会抛出错误 500 并拒绝提供该页面。

在确定哪些新代码破坏了系统时,我尝试注释掉包含 JS 代码的块(在脚本部分周围使用 HTML 注释),但无济于事。直到我真正删除了它才重新开始工作的行。确切地说,它不喜欢的是 'version="1.0"'。

我不明白的是,为什么 Apache 服务器或 PHP 在将页面提供给浏览器时甚至会查看这一行,或者更何况如果注释掉该块,它为什么会这样做。

如果我删除标头的“版本”部分,它会正常提供页面,但 XML 不起作用。

我对 PHP 和 JS 很陌生,所以我可能会遗漏一些明显的东西??

我正在运行所有软件的最新版本。

请给点意见?

危险

【问题讨论】:

  • 检查 php.ini 选项 short_open_tag 是否打开,如果打开,请尝试将其关闭,看看问题是否消失。 PHP 可能正在尝试将该 xml 标记解析为 php 代码。

标签: javascript php xml apache server-error


【解决方案1】:

另一种可能的解决方案

大家好,问题已经回答了,不过这里还有一个我觉得值得一提的方法。我选择这种方法是因为我没有运行任何 JavaScript,也不想启动。

错误

&lt;? ?&gt;”标签导致它作为 PHP 运行

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

JavaScript 解决方案(Starson 已经提到)

这会分解标签“&lt;? ?&gt;

var str2 = '<' + '?xml version="1.0" ?>';

PHP 解决方案(Starson 已经提到)

这会掩盖 PHP 中的“&lt;? ?&gt;”标签

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

【讨论】:

    【解决方案2】:

    正如@drew010 在 cmets 中指出的那样,您的 php.ini 可能启用了 short_open_tag 指令。这会导致 &lt;? 成为有效的开放式 php 标签,就像 &lt;?php 一样。

    启用此指令后,php 将以相同的方式解析这些:

    var str2 = '<?xml version="1.0" ?>';
    var str2 = '<?php xml version="1.0" ?>';
    

    如果您无法关闭该指令,因为您没有访问权限,或者一个或多个组件要求它处于打开状态,则此解决方法应该就足够了:

    var str2 = '<' + '?xml version="1.0" ?>';
    

    当您将行更改为此代码时代码工作的原因:

    var str2 = '<?xml?>';
    

    是 php 将 xml 视为单个语句。在这种情况下,在查找任何名为xml 的常量失败后,该语句可能解析为字符串"xml"。因为您没有回显字符串,只是评估它,所以您的 str2 变量最终应该等于 ""

    【讨论】:

    • 谢谢你们——你们说的完全正确。除了不知道 short_open_tag 之外,我没有想到您可以将 PHP 代码放在 Javascript 代码段的中间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2013-08-11
    • 2012-03-29
    • 2014-04-14
    相关资源
    最近更新 更多