当我将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
答案 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