我在 Centos 上使用 php-5.6.30 和 Apache 2.2.15。我正在使用这段代码:
$uri = trim(urldecode($_REQUEST['uri']));
$validate_content = @file_get_contents($uri);
echo $validate_content;
我正在访问它:http://10.20.30.40:8001/index.html?uri= “网址在这里” 每当我使用像 http://www.example.com 这样的 URL 时那么它工作正常。但每当我使用像 http://127.0.0.1:8000/App/app.html 这样的 URL 时或http://10.10.10.40:9000/App/app.html它返回 bool(false)。
当我在 Windows WampServer(Apache 2.4.18 - PHP 5.6.19 - MySQL 5.7.11) 上运行相同的代码(上面的代码)并访问它时。它运行良好。但是当我在 Centos(Apache 2.2.15、php-5.6.17-3(cli))中使用相同的代码时,它不起作用。
最佳答案
可能是 httpd 的 SELinux 设置禁止某些出站连接。尝试检查以下设置:
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> off
如果它设置为关闭,请尝试启用它:
$ sudo setsebool -P httpd_can_network_connect on
$ getsebool httpd_can_network_connect
httpd_can_network_connect --> on
现在您的 httpd 服务器应该能够建立传出连接。我不太确定为什么它已经可以连接到 http://www.example.com
,但不能连接到 localhost,但这解决了我系统上的相同问题。
虽然这可能会解决您的问题,但在更改此设置和其他设置时要小心。可能会存在不可预见的安全隐患,因此您应该在生产中使用此解决方案之前对其进行审查。
您可以看到影响 httpd 的所有设置:
$ getsebool -a | grep httpd
关于php - file_get_contents($url) 返回 bool(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42410813/