【问题标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 31989760 bytes) In a do...while loop允许的内存大小为 134217728 字节已用尽(尝试分配 31989760 字节)在 do...while 循环中
【发布时间】:2023-03-13 04:16:01
【问题描述】:

我有一段代码可以访问 API 以从 AWS Elastic 搜索中获取数据。当我增加大小时,我得到内存错误。现在我已将大小减小到 20,但想将结果作为 cronjob 循环,但它失败了。我已经将内存增加到 4096,但它失败了

我在 .ini 文件中增加了内存限制,但它失败了。由于它是一个 cronjob,我不知道如何使用滚动。

do {
  $transporter  = new TransporterController;
  $response = $transporter->dispatchSearch($paper->title, '55%', $size, $from, $rounds );
  $json_response = json_decode((string) $response->getBody(), true);
  $rounds = $json_response['rounds'];
  $from = $json_response['from'] + $json_response['size'];

  $response = $transporter->purify($response, $object);
  $impact_user_id = $paper->impact_user_id;
  $impact_type_id = 2;
  $response = $transporter->saveResult($response, $impact_user_id, $impact_type_id);
  $transporter->notifier($response, $user);
} while ($rounds > 1);

这个想法是让循环运行到完成,直到最后一页。这是一个 laravel cronjob。

【问题讨论】:

标签: php laravel memory guzzle php-ini


【解决方案1】:

以下是增加共享主机限制的三种方法:

  1. 只需将下面这一行添加到您收到错误的行之前 文件

     ini_set('memory_limit', '-1');
    
  2. 如果您有权访问 PHP.ini 文件,请更改 PHP.ini 中的行 如果您的行显示 32M,请尝试 64M:memory_limit = 64M;最高金额 脚本可能消耗的内存 (64MB)

  3. 如果您无权访问 PHP.ini,请尝试将其添加到 .htaccess 文件:php_value memory_limit 64M

还要确保您的文件指针有效,并为模式传递“r”(= 读取)。

【讨论】:

  • 我会小心更改 memory_limit 而不确保需要优化。
  • 我已经重组了代码以避免使用循环。我将最后一页保存到数据库中,每隔一段时间,运行 cronjob 以使用最后一页作为起点来获取。谢谢
  • 虽然您的解决方案有效,但我收到了太多请求错误。因此,决定取消循环。我找到了更好的选择。谢谢。
  • 在哪里添加?
  • 在 PHP.ini 文件中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2013-08-09
  • 2021-12-29
  • 2017-07-23
  • 2018-02-23
  • 2014-11-20
  • 2017-10-30
相关资源
最近更新 更多