Laravel5.2(+apache)において
プログラムにより、zipファイルをs3にアップロードしております。
zipファイルは多数の画像を圧縮したもので
画像の容量が大きすぎた場合、サーバーのmemory_limitを超えてしまいエラーとなってしまいました。
そこで考えたのが
画像を、幾つかのzipファイルに分割してアップロードするという方法です。
例えば
memory_limit = 500M だった場合、
600Mのzipファイルは当然エラーとなるので
画像容量を一枚ずつ測り、500Mを超える一歩手前まででzipファイルを作成し
残り約100Mの画像をzipにします。
S3へアップロードする際のコードは以下のようになっています。
php
1$s3 = Storage::disk('s3'); 2$s3->put($s3Path, File::get($localPath)); 3File::delete($localPath);
実際は、この処理を、zipファイルの数だけ回しています。
しかしコレだと、File::getを実行するたびに、メモリを消費していしまい、
結局memory_limitに達してしまい、処理が止まってしまいます。
なので、一回この処理を行うごとにメモリを開放したいです。
解決策
解決策として、色々調べましたが
File::get()の部分を変数に入れunset()をしましたが
これではメモリを開放できませんでした。
備考
できれば、コードは変えずにメモリ解放を正確に行いたいですが
File:get()の中ではfile_get_contents
が実行されており、これだとメモリを使ってしまうのでreadfile()
をつかうといいみたいな記事もありました。
これだと上手く行きませんでした。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/24 02:40