AWS Laravel 技術情報

Laravel(PHP)で画像ファイルアップロード時にInternal Server Errorが出た際の対処

Laravel(PHP)で画像ファイルアップロード時にInternal Server Errorが発生しました。

普通のInternal Server Errorではなく、スクリプトでInternal Server Errorと出るのが厄介でした。
(スクリプト上なので、エラーログがPHP側でキャッチされず、原因の特定に時間を要しました)

原因の調査としては、セッションが切れたのか、回線速度が遅いのか、ファイルサイズが影響しているのか等々、色々と調査しました。

そこでわかったのが、アップロードに成功した画像ファイルと、失敗した画像ファイルを比較したところ、色々な色を使ったカラー画だと1MB程度でもエラー。
あまり色数を使っていない画像だと10MBくらいでも問題なく通ったりと、画像ファイルによって違うという現象でした。

そして原因としては、php.iniのmemory_limitが原因でした。

AWS Lightsailのデフォルト環境で、memory_limitが128MBとなっていたところ、256MBを指定したところ、エラーが回避されました。
(※256MBで今回のエラーが回避できた事は確認しましたが、実環境では余裕をもって512MBに設定しました)

Lightsail環境のphp.iniはこちらのフォルダにあります。

vi /opt/bitnami/php/etc/php.ini

初期設定で128MBと指定されていたmemory_limitを、

memory_limit = 128M

256MBに変更しました。

memory_limit = 256M

php.iniを変更したら、apacheとphpを再起動させて変更を反映させます。

sudo /opt/bitnami/ctlscript.sh restart apache
sudo /opt/bitnami/ctlscript.sh restart php-fpm

今回の原因が特定に至った理由として、同じアプリケーションを動作させていた別環境(エックスサーバー)にて、Lightsailでエラーとなったアップロード画像が問題なくアップロードできた為、環境を比較していったところ、memory_limitという原因を特定させることができました。
(エックスサーバー環境でも、memory_limitを小さくしたらこのエラーが発生しました)

株式会社OZでは、他の方達にも有益と思われる情報は、社内ナレッジに留めず、積極的に情報公開するという方針をとっております。
株式会社OZをよろしくお願いします!

-AWS, Laravel, 技術情報
-, , , ,