2017-03-14 68 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已在兩個文件中啓用。 –