首页 > 解决方案 > 在 GuzzleHttp\Client 上调用“请求”时允许的内存大小耗尽

问题描述

我正在使用以下方法调用 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 页时,会发生内存错误。

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

标签: phpguzzle

解决方案


在 GitHub 上查看此问题,可能与您的情况有关。

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

对您来说最好的选择是使用 Blackfire 分析您的代码(您可以在 GitHub 上的上述问题中看到一个示例)。


推荐阅读