我有一个包含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
的内存限制,但这不是一个临时解决方案吗?任何想法都会有所帮助
答案 0 :(得分:0)
问题出在SELECT *
。我非常怀疑你需要所有的桌子。以块的形式显示来自它的数据。
分页会有所帮助。
<强> UPD 强> 比分页更好的想法 - 将文件视为文件。这意味着将它们存储为文件。并且只在您的实体中保留文件名(或其他标识符)。