繁体   English   中英

上传到s3存储桶时PHP内存不足 - Laravel 5.2

[英]PHP running out of memory when uploading to s3 bucket - Laravel 5.2

使用Laravel 5.2我正在尝试使用存储外观将文件上传到AWS s3存储桶:

    $file = Input::file('file');

    Storage::put('filename', file_get_contents($file));

但我收到错误消息:

FatalErrorException in RequestException.php line 107:
Allowed memory size of 134217728 bytes exhausted (tried to allocate 47696229 bytes)

filesize在允许的内存大小范围内,无论我在php.ini中增加允许的内存大小,它仍然会抛出相同的错误。

什么想法可能会出错?

您要做的第一件事就是上传一个非常小的文件。 比方说100KB。 然后一个1MB的文件。 等等,直到应用程序崩溃。

我知道你更愿意使用Laravel将文件上传到S3; 但在此阶段 - 根据您上传的文件大小 - 您可能希望使用命令行工具,例如s3cmd。 这背后的原因是,在您正在进行的网络堆栈中上传并不方便:

1 - 它不会缩放。 1MB的文件可能有效,但1,00001MB的文件可能会使应用程序崩溃。

2 - 这要求你让PHP消耗大量内存。 因此,执行相同操作的多个单独进程可能会导致Web堆栈中断,从而导致停机。 在一个单独的过程中旋转 - 与队列一起 - 将使系统扩大规模。

3 - 如果您坚持使用Laravel进行上传,请执行以下操作:CLI执行实际上载,而不是Web堆栈。 再次,为此使用队列。

作为一般建议,当你发现自己增加了天文数值的内存限制以使你的脚本工作时,很可能你做错了,可以更有效地完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM