为什么file_get_contents适用于google.com但不适用于我的网站?

时间:2011-05-16 08:49:18

标签: php django get

$page1 = file_get_contents('http://www.google.com');

$page2 = file_get_contents('http://localhost:8000/prueba');

当我回应结果时,Google可以使用,但不能使用我的网站。当我把地址放在资源管理器上时。这发生在我在django制作的所有网站上。 :(

警告:file_get_contents(http://localhost:8000/prueba)[function.file-get-contents]:无法打开流:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败因为连接的主机无法响应。在第138行的C:\ xampp \ htdocs \ squirrelmail \ plugins \ captcha \ backends \ b2evo \ b2evo.php

致命错误:第138行的C:\ xampp \ htdocs \ squirrelmail \ plugins \ captcha \ backends \ b2evo \ b2evo.php超出了60秒的最长执行时间

2 个答案:

答案 0 :(得分:20)

对于使用PHP内置Web服务器(在我的情况下使用Laravel)出现此问题的任何人,都是由于您的请求被file_get_contents()/ curl函数阻止而造成的。

Docs开发服务器说

  

如果请求被阻止,PHP应用程序将停止。

由于PHP内置服务器是单线程的,因此请求服务器上的其他URL 将停止第一个请求,它会超时。

作为解决方案,您可以使用nginx(LEMP stack)或其他网络服务器。

编辑:截至目前,我建议您使用Homestead作为PHP项目的开发环境。它为您节省了大量工作,包括配置,创建虚拟主机和更多项目的数据库配置。

答案 1 :(得分:0)

作为zub0r pointed out,内置的PHP服务器是单线程的。如果您不想安装和配置像nginx这样的Web服务器,并且不想使用Homestead或Valet,那么还有另一种简单的解决方案:

使用另一个端口启动内置PHP服务器的另一个实例,并在应用程序的内部请求中使用它。

php -S localhost:8000
\\ in another console
php -S localhost:8001

当我通过Guzzle请求一些本地虚拟API时,我在Laravel应用中使用了它,并且效果很好。