2010-11-15 186 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