【问题标题】:file_get_contents - Connection timed outfile_get_contents - 连接超时
【发布时间】:2022-02-11 02:26:37
【问题描述】:
<?php
$a = file_get_contents('http://www.google.com');
echo $

为什么浏览器会返回这个错误?

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

【问题讨论】:

    标签: php


    【解决方案1】:

    很可能您的服务器无法连接到外部资源,例如,由于防火墙限制。

    【讨论】:

    • ...或 Google 已关闭,但这似乎不太可能:D
    • 顺便说一句,我只是用 google 为例,它可以工作,但我想要的链接不是。
    • 哦,如果你用浏览器点击链接会发生什么?
    • 愿意分享一个不适合我们复制错误的 URI 吗?
    【解决方案2】:

    file_get_contents 在获取远程文件时根本无法正常工作,因此不应使用。它不处理慢速网络连接或重定向,也不返回错误代码。您应该使用curl 来获取远程文件。

    手册中有curl_exec的示例:http://us3.php.net/manual/en/function.curl-exec.php

    【讨论】:

    • 我向您保证,file_get_contents() 在获取远程文件时工作得很好,并且可以用于大多数情况。此外,它确实遵循正确的 HTTP 重定向,但最近报告了此功能的错误,我假设这就是您所指的。最后,是的,如果您需要 HTTP 状态代码,那么您应该使用更健壮的东西。如果您只需要捕获错误,那么您可以使用 file_get_contents() 就好了。同样,正如您所指出的,这适用于很多情况,但肯定不是全部。
    • 否决正确答案?我没有说它不工作,我说它不工作。正如您所说,curl 是一种更可靠、更强大的工具。 curl 很可能不会发生超时错误,因为 curl 默认为网络超时(即 2 分钟)。
    【解决方案3】:

    我遇到了同样的问题,无法使用 file_get_contents() 下载,但在命令行上使用 curl 获取相同的 URL 效果很好。原来它试图通过 IPv6 连接失败。

    我通过在内核参数中禁用 IPv6 解决了这个问题。

    【讨论】:

    【解决方案4】:

    这可能是服务器端问题,可能是您的服务器无法与其他服务器远程通信。您必须与服务器管理员沟通。

    【讨论】:

      【解决方案5】:

      由于某些原因,file_get_contents() 在某些支持 IPv6 的网站上会间歇性失败(可能有 20% 的时间,命令超时)。尽管禁用 IPv6 可以解决问题,但随着越来越多的网站迁移到 IPv6,这并不是最佳解决方案。

      我编写了一个简单的 PHP gethtml() 函数,它使用 wget 解决了这个问题。当 IPv4 不可用时,这将自动使用 IPv6。一个小缺点是它使用外部命令,但我认为它比禁用 IPv6 更可取。

      如果您的发行版上尚未安装 wget,您可以按如下方式安装:

      sudo apt install wget
      

      PHP函数示例:

      $myhtml = gethtml("http://example.com");
      
      //use instead of file_get_contents() due to inconsistent IPv6 performance
      function gethtml($url){return shell_exec("wget --prefer-family=IPv4 -qO- ".$url);}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-29
        • 2013-08-29
        • 2015-09-16
        • 2012-04-28
        • 2014-06-22
        • 1970-01-01
        • 2020-10-08
        • 2022-01-21
        相关资源
        最近更新 更多