2017-03-14 32 views
1

当我使用的file_get_contents与URL(http://example.com或其他)的工作,它会返回false不同的背景下,USER_AGENT等:的file_get_contents和卷曲不是通过PHP的工作,但在CLI

file_get_contents(http://example.com):failed to open stream: operation failed

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

我试图用卷曲相同,得到了以下错误:

cURL Error (7): couldn't connect to host

据对计算器的一些解决方案,我们改变在php.ini文件中此设置:

ini_set('allow_url_fopen', 1); 

我也有使用史努比库后,包括史努比class.php

require "Snoopy/Snoopy.class.php"; 
$snoopy = new $Snoopy; 
fetchtext("http://example.com"); 
$text = $snoopy->results; 

它也给了一个em pty响应。

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

服务器的详细信息:

的Debian GNU/Linux的7.6(喘息)

的Apache/2.2.22(Debian的)

PHP 5.4.45-0 + deb7u7

回答

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"); 

(谷歌使用HTTPS,始终重定向到www子域)。

您是否检查过您尝试查询的网址是否有效(即结构,转义特殊字符)?如果您可以提供您想要拨打的真实网址,这将非常有帮助。

+0

这应该是一个例子。我们尝试了几个(非https)域名。仍然没有工作。 –

+0

你能给一个真正的URL来测试吗? –

+0

我们正在测试的网址位于我们的本地网络上。 –

0

从正在运行的PHP文件(Apache或命令行)有关,检查是否有了allow_url_fopen =在双方的php.ini文件: /etc/php5/cli/php.ini 的/ etc /php5/apache2/php.ini

+0

allow_url_fopen已在两个文件中启用。 –