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をよろしくお願いします!