我们有一个简单的PHP脚本,可以从外部XML文件加载服务器状态,如下所示:
$xml = simplexml_load_file("http://domain.com/?module=server&action=status-xml");
foreach ($xml->Group->Server->attributes() as $nodename => $value){
if ($nodename == $param){
return $value;
}
}
当脚本运行时,我们收到内部服务器错误500.查看错误日志,我们看到以下内容:http://i.stack.imgur.com/alOYI.png
基本上,网址中的& 正在进入& amp;
知道为什么会这样吗?这是在apache2 / w php-fpm设置。这是某种安全设置吗?
答案 0 :(得分:2)
您看到的是PHP错误消息的 HTML 输出,其中&
被转换为其各自的HTML实体&
。这并不意味着&
在查询字符串中发送到服务器。
答案 1 :(得分:0)
据我所知,这仅仅是一个错误报告功能,而不是在发出请求时URL的实际更改。您可以检查托管商是否已启用 html_errors 选项,或者您自己安装期间是否已启用 html_errors 选项。 (更多信息:www.php.net)
启用 html_errors 后,所有错误内容都将转换为HTML实体,并添加指向在线PHP文档的链接。如果您随后检查服务器上的error.log,您将看到实体为文本而不是HTML。
答案 2 :(得分:0)
如php doc中所述,您应该这样使用它。
simplexml_load_file(rawurlencode('http://example.com/?a='.urlencode('b').'&c='.urlencode('d')))
希望这有帮助。
[编辑] 但请确保服务器上所需的功能正常工作。通过直接从浏览器调用您的URL来检查这一点。这应该输出一个xml文件。