2010-11-15 185 views
5
<?php 
$a = file_get_contents('http://www.google.com'); 
echo $ 

爲什麼瀏覽器返回此錯誤?file_get_contents - 連接超時

Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: Connection timed out in /home/test.php on line 2 

回答

3

大多數情況下,您的服務器可能無法連接到外部資源,例如,由於防火牆的限制。

+2

...或谷歌倒閉了,但看起來不太可能:D – Hamish 2010-11-15 23:53:12

+0

我該如何解決這個問題? – Bruno 2010-11-15 23:53:21

+0

順便說一句,我用谷歌只是例如,它的工作,但與我想要的鏈接不是。 – Bruno 2010-11-15 23:56:22

0

file_get_contents在獲取遠程文件時不能很好地工作,因此不應使用。它不處理較慢的網絡連接或重定向,並且不返回錯誤代碼。您應該使用curl來取回遠程文件。

沒有爲curl_exec手冊中的例子:http://us3.php.net/manual/en/function.curl-exec.php

+5

我向您保證,file_get_contents()可以在獲取遠程文件的情況下正常工作,*可*用於*大多數情況。此外,它*會*遵循正確的HTTP重定向,但最近有報告稱此功能存在一些錯誤,我正在假設這是您所指的。最後,是的,如果你需要HTTP狀態代碼,那麼你應該使用更強大的功能。如果你只需要捕獲一個錯誤,那麼你可以使用file_get_contents()就好了。同樣,這在很多情況下都很好,但是當然不是全部,正如你所指出的那樣。 – Brad 2010-11-16 02:32:54

+1

投票正確答案?我沒有說它不起作用,我說它運作不好。正如你所說,捲曲是一種更加可靠和可靠的工具。由於curl默認爲網絡超時(即2分鐘),因此捲曲最有可能不會發生超時錯誤。 – 2010-11-16 04:21:10

0

這可能是服務器端的問題,可能是你的服務器無法與其他服務器進行遠程通信。您必須與服務器管理員進行通信。

2

我有同樣的問題,無法使用file_get_contents()下載,但在命令行上使用curl來查找相同的URL可以正常工作。原來它試圖通過IPv6連接失敗。

我通過在我的內核參數中禁用IPv6來解決這個問題。

+0

您應該嘗試修復它,而不是關閉IPv6。如果失敗,你也可以['file_get_contents()'嘗試通過IPv6連接,然後通過IPv4](https://www.slightfuture.com/webdev/php-file-contents-dual-stack)。 – Aeyoun 2016-12-08 14:20:27