PHP file_get_contents Returns 504 大文件

PHP file_get_contents Returns 504 on Larger Files

我正在构建一个 PHP 网站,用于从 MySociety 的 EveryPolitician 下载 JSON 文件。其中一些文件很小,而另一些则非常大。以下是我提出的典型请求的两个示例:

$g = file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/US_Virgin_Islands/Legislature/ep-popolo-v1.0.json");

$g = file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/UK/Commons/ep-popolo-v1.0.json");

第一行工作正常,我认为这是因为请求的文件规模较小,但第二行在浏览器中永远加载,然后返回网关超时错误 (504)。

如果我将我的浏览器指向第二个 URL,它会加载正常(虽然几秒钟后;毕竟它很大)。目前,该脚本在我的本地计算机上为 运行,因此带宽或互联网速度没有差异。如您所见,这两个文件都来自 GitHub.

更让我困惑的是,几天前,第二行确实工作过一次。

这只是 PHP 的 file_get_contents() 的限制吗?有什么办法可以使用 file_get_contents() 来解决这个问题,或者是否有另一个库在这种情况下会更好地工作?

您可以尝试这样设置默认套接字超时:

ini_set('default_socket_timeout', 360);

这会给 file_get_contents() 6 分钟的时间来尝试连接。此外,您可以创建一个上下文数组并将其传递给 file_get_contents() 函数,这样您就不必更改 ini 值 ala:

$context = stream_context_create(array( 
    'http' => array( 
        'timeout' => 360 
        ) 
    ) 
);
file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/UK/Commons/ep-popolo-v1.0.json", 0, $context); 

希望对您有所帮助