Doctrine Blob类型内存不足错误

时间:2017-08-14 09:33:11

标签: php doctrine-orm out-of-memory

我有一个包含Blob字段的表。有时,在加载此数据的概述页面(显示所有数据,后端通常的SELECT *语句)时,我会收到内存不足错误 - 最新的错误显示如下(拆分多行读取) ):

request.Critical: Uncaught PHP Exception
Symfony\Component\Debug\Exception\OutOfMemoryException: "Error: Allowed memory size of
134217728 bytes exhausted )tried to allocate 1679360 bytes)" at /var/www/html/my_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php
line 50 ("exception":"[object]
(Symfony\\Component\\Debug\\Exception\\OutOfMemoryException(code: 0): Error: Allowed memory
size of 134217728 bytes exhausted (tried to allocate 1679360 bytes) at /var/www/html/my_project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php:50)")
[]

Doctrine库中引用的第50行是

48. if (is_string($value)) {
49.    $fp = fopen('php://temp', 'rb+');
50.    fwrite($fp, $value); // Exception occurs here
51.    fseek($fp, 0);
52.    $value = $fp;
53. }

我该如何处理?我还没有在网上找到完全相同的问题。与fwrite发生的内存不足异常的其他问题谈论使用流来写入数据 - 但这会使我不喜欢的Doctrine库(我自己没有完全理解)搞乱。其他解决方案建议提高php.ini的内存限制,但这不是一个临时解决方案吗?任何想法都会有所帮助

1 个答案:

答案 0 :(得分:0)

问题出在SELECT *。我非常怀疑你需要所有的桌子。以块的形式显示来自它的数据。 分页会有所帮助。

<强> UPD 比分页更好的想法 - 将文件视为文件。这意味着将它们存储为文件。并且只在您的实体中保留文件名(或其他标识符)。