使用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中允许的内存大小,它仍然会抛出同样的错误。
任何可能出错的想法?
答案 0 :(得分:0)
您要做的第一件事就是上传一个非常小的文件。我们说100KB。然后一个1MB的文件。依此类推,直到应用程序崩溃。
我知道您更愿意使用Laravel将文件上传到S3;但在此阶段 - 根据您上传的文件大小 - 您可能希望使用命令行工具,例如s3cmd。这背后的原因是,在您正在进行的网络堆栈中上传并不方便:
1 - 它没有缩放。 1MB的文件可能有效,但1,00001MB的文件可能会使应用程序崩溃。
2 - 这要求你让PHP消耗大量内存。因此,执行相同操作的多个单独进程可能会导致Web堆栈中断,从而导致停机。在一个单独的过程中旋转 - 与队列一起 - 将使系统向上扩展。
3 - 如果您坚持使用Laravel进行上传,请执行以下方式:CLI执行实际上传,而不是Web堆栈。再次,为此使用队列。
作为一般性建议,如果您发现自己增加了天文数值的内存限制以使您的脚本正常工作,那么您很可能会做出错误的事情,可以更有效地完成。< / p>