为什么file_get_contents适用于 google.com 而不是我的网站


Why does file_get_contents work with google.com but not with my site?

$page1 = file_get_contents('http://www.google.com');
$page2 = file_get_contents('http://localhost:8000/prueba');

当我回显结果时,谷歌它适用于我的网站,但不适用于我的网站。当我把地址放在资源管理器上时,工作。这发生在我在 django 中制作的所有网站上。:(

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

致命错误:在第 138 行的 C:''xampp''htdocs''squirrelmail''plugins''captcha''backends''b2evo''b2evo.php中超过了 60 秒的最大执行时间

对于使用

PHP 内置 Web 服务器(在我的情况下使用 Laravel)时遇到此问题的任何人,这是由于您的请求被 file_get_contents()/curl 函数阻止引起的。

开发服务器的文档说

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

由于 PHP 内置服务器是单线程的,因此在您的服务器上请求另一个 url将停止第一个请求,并且超时。

作为解决方案,您可以使用适当的Web服务器(nginx,apache等)。

编辑:截至目前,我真的建议您使用Laravel Sail作为PHP项目的开发环境。它为您节省了大量设置和配置不同服务(Web服务器,数据库,队列等)的时间。

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

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

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

当我通过 Guzzle 请求一些本地虚拟 API 时,我在我的 Laravel 应用程序中使用它,它工作正常。

要从 PHP 本地文件获取内容的结果,您可以使用:

exec('php file.php', $content);

有时$content变量是一个数组,所以只需指向正确的键,如$content[3]

希望这对你有帮助。