XML标头导致服务器错误500(即使已注释掉!)

时间:2014-01-21 05:25:56

标签: javascript php xml apache server-error

我花了好几个小时追逐我遇到过的一个最怪异的错误。我编写了一些Javascript代码,可以动态生成一些XML并将其发送到运行Apache和PHP的服务器。

JS代码片段是:

<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&amp; JS所以我可能会遗漏一些明显的东西吗?

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

想法好吗?

DG

2 个答案:

答案 0 :(得分:3)

正如@ drew010在评论中指出的那样,你的php.ini可能有short_open_tag指令。这会导致<?成为有效的开放式php标记,就像<?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变量最终应等于""

答案 1 :(得分:2)

另一种可能的解决方案

大家好,这个问题已经回答了,但这是我认为值得一提的另一种方法。我之所以选择这种方法,是因为我没有运行任何JavaScript,也不想开始。

错误

<? ?>”标签导致它以PHP格式运行

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

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

这会破坏标记“<? ?>

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

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

这会掩盖PHP

中的“<? ?>”标记
<? echo '<?xml version="1.0" encoding="UTF-8" ?>';?>