php - file_get_contents($url) 返回 bool(false)

标签 php file-get-contents

我在 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/

相关文章:

regex - 在两个字符串Powershell之间替换文本

php - 调用未定义的方法 App\Console\Kernel::load() - Laravel 5.4

php - 如何使用来自其他 namespace 的对象以及如何在 PHP 中导入 namespace

php - 以 url 作为变量的 file_get_contents

http - file_get_contents 和错误代码

php - file_get_contents()无法打开流

php - 编辑图片/就地 "moving"(一个 la Facebook 个人资料图片编辑)

php - 清理 php session 文件

php - 合并两个表并求和 mysql

php - PHP 5.3 是否改变了 file_get_contents 的工作方式?