file_get_contents和curl不通过php工作但在CLI上工作

时间:2017-03-14 12:41:51

标签: php linux apache curl debian

当我将file_get_contents与url(http://example.com或其他)一起使用时,它将返回false,具有不同的上下文,user_agent等:

  

file_get_contents(http://example.com):failed打开流:操作   失败

然而,当我们将file_get_contents()用于本地文件时,它可以工作。但是当我们尝试通过http访问任何文件时,它会显示上述错误。

我使用cURL尝试了相同的操作,并出现以下错误:

  

cURL错误(7):无法连接到主机

根据stackoverflow上的一些解决方案,我们在php.ini文件中更改了此设置:

ini_set('allow_url_fopen', 1);

在包含snoopy class.php

之后,我也使用了snoopy库
require "Snoopy/Snoopy.class.php";
$snoopy = new $Snoopy; 
fetchtext("http://example.com");
$text = $snoopy->results;

它也是一个空洞的回应。

如果我使用终端cURL或wget相同的URL,它可以很好地工作。但是当文件不是本地文件(通过HTTP)时,它在PHP代码中不起作用。

服务器详细信息:

Debian GNU / Linux 7.6(wheezy)

Apache / 2.2.22(Debian)

PHP 5.4.45-0 + deb7u7

3 个答案:

答案 0 :(得分:2)

在Debian中,会有一个 aid_inet 组。 Apache应该是该组的成员,以允许访问网络。

运行以下命令以获取apache用户。在我的机器中它的 www-data

cat /etc/passwd

尝试使用此命令在 aid_inet 组中添加apache用户。

usermod -a -G aid_inet www-data

[注意:如果你有不同的apache用户,那么使用你自己的]

现在,再次运行您的PHP代码进行测试。它应该工作。

答案 1 :(得分:0)

您的代码中存在错误,可能是问题:

fetchtext("http://"google.com");

应该是:

fetchtext("https://www.google.com");

(Google使用HTTPS,并始终重定向到www子域名。)

您是否检查过您尝试查询的网址是否有效(即结构,转义特殊字符)?如果你能提供一个你试图打电话的真实网址,那将会非常有帮助。

答案 2 :(得分:0)

关于运行php文件(apache或命令行)的位置,检查两个php.ini文件中是否有 allow_url_fopen = On : /etc/php5/cli/php.ini /etc/php5/apache2/php.ini