【问题标题】:Why does file_get_contents work with google.com but not with my site?为什么 file_get_contents 可以在 google.com 上使用,但不能在我的网站上使用?
【发布时间】:2011-08-26 06:38:14
【问题描述】:
$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]: failed to open stream: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接主机未能响应。在 C:\xampp\htdocs\squirrelmail\plugins\captcha\backends\b2evo\b2evo.php 第 138 行

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

【问题讨论】:

  • 它检索什么?一个空字符串? var_dump(get_headers('http://localhost:8000/prueba')); 给了什么?
  • 致命错误:在第 138 行的 C:\xampp\htdocs\squirrelmail\plugins\captcha\backends\b2evo\b2evo.php 中,最大执行时间超过了 60 秒,执行时间太长,你是要获取 index(.html/.php) 文件的内容还是目录 prueba 的内容?
  • 手动去localhost:8000/prueba真的有效吗?您是否使用本地测试系统?如果您在外部服务器上执行此操作,它将无法正常工作
  • 你不应该使用这个函数来做这个。
  • 我真正提出的是 php 中对我在 Django 中的站点的请求。我想获取我在 django 中创建的站点,并且目录 prueba 不存在,因为 django 与 php 不同

标签: php django get


【解决方案1】:

对于使用 PHP 内置 Web 服务器(在我的例子中是 Laravel)遇到此问题的任何人,这是由于您的请求被 file_get_contents() / curl 函数阻止所致。

开发服务器的Docs 这么说

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

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

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

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

【讨论】:

  • 24 小时黑客马拉松的最后 2 小时 - 被这种废话浪费了!至少我现在知道了! :)
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多