2009-08-17 40 views
1

我試圖執行一個簡單的PHP調用加載網頁的內容: $result = file_get_contents("http://www.google.com");的file_get_contents與HTTP:沒有這樣的文件或目錄

回來的結果是沒有發現一個奇怪的文件錯誤: Warning: file_get_contents(http://www.google.com): failed to open stream: No such file or directory in /var/www/html/test.php on line 5

我有「allow_url_fopen選項=在」我的php.ini並可能改變該目錄中的設置沒有.htaccess文件。有任何想法嗎?在不同的服務器上,我從來沒有遇到這個函數的麻煩。

+0

你試過把'圍繞網址? – Zed 2009-08-17 16:34:02

+0

file_get_contents行中有雙引號,錯誤只是不顯示它們。單引號具有相同的效果。 – timbonicus 2009-08-17 16:55:49

回答

1

顯然,HTTP流包裝不存在,這將導致此錯誤。

print_r(stream_get_wrappers()); 

Array 
(
    [0] => php 
    [1] => file 
    [2] => data 
    [3] => compress.zlib 
) 

我不知道它是如何刪除或如何恢復它,但這可以解釋它!我已經嘗試過stream_wrapper_restore('http'),以防它以某種方式未註冊,但那沒有任何作用。

+0

有類似的問題,但有https。找到我在這裏尋找的答案http://stackoverflow.com/questions/1975461/file-get-contents-with-https – 2012-11-09 11:25:30

0

您是否重新初始化您的網絡服務器上更改「allow_url_fopen」?

OR

用戶代理「PHP」可能要查詢的服務器上是不允許的。

OR

從PHP手冊頁:注意:如果你有特殊字符,如空格打開一個URI,你需要編碼用urlencode的URI()。

你可以做這樣的php.ini設置測試...

if (ini_get('allow_url_fopen') == '1') { 
    // use fopen() or file_get_contents() 
} else { 
    // use curl or your custom function 
} 
+1

好的建議,我重新啓動了網絡服務器,並添加: 'ini_set('user_agent','Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2)Gecko/20090729 Firefox/3.5。 2 GTB5');' 可悲的是,沒有改變。添加urlencode也沒有效果。 – timbonicus 2009-08-17 16:51:54

0

我認爲這是某種形式的代理效果。
你使用代理服務器嗎?如果是這種情況,則必須使用代理詳細信息創建一個流上下文。

+0

沒什麼特別的,盒子在NAT後面,但沒有代理。我可以從命令行使用wget並檢索相同的網頁。 – timbonicus 2009-08-17 16:53:15

+0

您是否嘗試過在其他頁面上使用file_get_contents?就像使用絕對地址到一些本地文件或其他不使用https的網站一樣。 檢查php.openssl.dll是否在您的php.ini中未註釋,保存該文件並重新啓動服務器。 – w35l3y 2009-08-17 17:55:54

0

不知道,但嘗試:

if(($fp=fopen('http://www.google.com/', 'rb'))!=null) 
{ 
// for php5 and up or use fread for php4 
$contents = stream_get_contents($fp); 
fclose($fp); 
} 
相關問題