1

我们有一个简单的 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

基本上,URL 中的&被 urlencoded(在运行时,不知何故)变成& amp ;

知道为什么会这样吗?这是在 apache2 /w php-fpm 设置上。这是某种安全设置吗?

4

3 回答 3

2

您看到的是 PHP 错误消息的HTML&输出,其中转换为相应的 HTML 实体&。这并不意味着&在查询字符串中发送到服务器。

于 2013-05-28T15:27:02.990 回答
0

据我所知,这只是一个错误报告功能,而不是发出请求时 URL 的实际更改。您可以检查html_errors选项是否已由主机或在您自己的安装过程中启用。(更多信息:www.php.net

启用html_errors后,所有错误内容都将转换为 HTML 实体,并且将添加指向在线 PHP 文档的链接。如果您随后检查服务器上的 error.log,您将看到实体为文本而不是 HTML。

于 2013-05-28T15:30:02.277 回答
0

php 文档中所述,您应该以这种方式使用它。

simplexml_load_file(rawurlencode('http://example.com/?a='.urlencode('b').'&c='.urlencode('d')))

希望这可以帮助。

[编辑] 但请确保您的服务器上所需的功能有效。通过直接从浏览器调用您的 URL 来检查这一点。这应该输出一个 xml 文件。

于 2013-05-28T15:30:38.357 回答