当我尝试检索大列内容时如何解决“允许的内存大小”

时间:2019-04-16 17:36:33

标签: php mysql laravel laravel-5.4

我正在尝试检索具有较大内容(67MB)的行,但是在运行查询findOrFail时这还没有完成,中间日志显示错误Allowed memory size of 134217728 bytes exhausted (tried to allocate 71224881 bytes)

然后在findOrFail之前添加ini_set('memory_limit', '-1');并可以使用,但是内存限制的问题是,当内存用尽时,Web服务器可能会崩溃

有人知道如何在不使用内存限制的情况下避免该错误吗?

这是我的代码

// Doesn't work
$file = $query->findOrFail($id);
$file->download($request->filename);
// It works
ini_set('memory_limit', '-1');
$file = $query->findOrFail($id);
$file->download($request->filename);

这是下载方法

public function download($contentType = 'application/octet-stream') {
  header("Content-Type: $contentType");
  header("Content-Transfer-Encoding: Binary");
  header("Content-disposition: attachment; filename=\"$this->filename\"");
  echo $this->content;
}

0 个答案:

没有答案