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

时间:2016-06-21 14:30:19

标签: php laravel amazon-web-services amazon-s3 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中允许的内存大小,它仍然会抛出同样的错误。

任何可能出错的想法?​​

1 个答案:

答案 0 :(得分:0)

您要做的第一件事就是上传一个非常小的文件。我们说100KB。然后一个1MB的文件。依此类推,直到应用程序崩溃。

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

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

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

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

作为一般性建议,如果您发现自己增加了天文数值的内存限制以使您的脚本正常工作,那么您很可能会做出错误的事情,可以更有效地完成。< / p>