【问题标题】:Allowed memory size exhausted when calling "request" on GuzzleHttp\Client在 GuzzleHttp\Client 上调用“请求”时允许的内存大小耗尽
【发布时间】:2020-01-22 15:00:10
【问题描述】:

我正在使用以下方法调用 API(使用 Guzzle,PHP HTTP 客户端 6.5.2):

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/api');

几次调用都能正常工作,但如果数据量很大,我必须在循环中多次发出请求(逐页获取数据):

$client = new \GuzzleHttp\Client();

do {

  //...

  $response = $client->request('GET', 'https://example.com/api');

  //...

} while($pageNumber <= $totalPages);

那么我最终会在循环中间得到如下内存错误:

致命错误:第 40 行 guzzlehttp/guzzle/src/Handler/CurlHandler.php 中允许的内存大小为 268435456 字节已用尽(尝试分配 1384448 字节)

返回的$response 的大小几乎是 1MB。此外,它不是无限循环。 $pageNumber 计算正确,循环结束,数据量较少。当总页数达到 200 页时会发生内存错误。

知道如何解决这个问题吗?

【问题讨论】:

  • 您得到的$response 是什么?有这么大吗?另外,我没有看到 $pageNumber++ 在任何地方完成?
  • 所以这意味着某些变量没有在循环中重置或包含太多信息。显示更多相关代码,因为现在看起来不错

标签: php guzzle


【解决方案1】:

请查看this issue on GitHub,可能与您的情况有关。

否则没有足够的信息可以说些什么。这个问题很容易与 Guzzle 无关。

您的最佳选择是使用 Blackfire 分析您的代码(您可以在 GitHub 上的上述问题中查看示例)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多