我花了好几个小时追逐我遇到过的一个最怪异的错误。我编写了一些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
答案 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" ?>
这会破坏标记“<? ?>
”
var str2 = '<' + '?xml version="1.0" ?>';
这会掩盖PHP
中的“<? ?>
”标记
<? echo '<?xml version="1.0" encoding="UTF-8" ?>';?>