1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP画像アップロードエラーの原因究明:upload_max_filesizeとの戦い

Posted at

はじめに

チャットシステムの画像アップロード機能でエラーが発生し、原因を特定するのに苦労したので、備忘録として残しておきます。
同じ問題で悩んでいる方の参考になれば幸いです。

発生した現象

画像アップロード機能では、5MB以下のファイルのみアップロードできるように設定していました。普段は問題なく動作していたのですが、ある画像(約4MB)をアップロードしようとした際に、突然エラーが発生…。原因を探るべく、調査を開始しました。

原因追及

クライアントから送信されたファイルデータをデバッグしてみました。そうすると、以下のように表示されました。

  'file' => 
  \Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => '26074.jpg',
     'mimeType' => 'image/jpeg',
     'error' => 1,
     'originalPath' => '26074.jpg',
     'hashName' => NULL,
  )),

よくみてみると、errorの箇所が1になっています。1ということはなにかファイルアップロードでエラーが起きているぞと、、恥ずかしながら、ファイルアップロードのエラーコードについて知見があまりなかったので、この1が意味することがわかりませんでした。そこでエラーコードを調べてみました。

(参考)

コード エラー定数 説明
0 UPLOAD_ERR_OK エラーなし
1 UPLOAD_ERR_INI_SIZE php.iniのupload_max_filesizeのサイズを超えている
2 UPLOAD_ERR_FORM_SIZE HTMLフォームで指定された MAX_FILE_SIZE を超えている
3 UPLOAD_ERR_PARTIAL 一部のみしかアップロードされていない
4 UPLOAD_ERR_NO_FILE アップロードされなかった
6 UPLOAD_ERR_NO_TMP_DIR サーバー一時保管フォルダがない
7 UPLOAD_ERR_CANT_WRITE ディスクへの書き込みに失敗
8 UPLOAD_ERR_EXTENSION PHPの拡張モジュールがアップロードを中止した

つまり今回はエラーコードが1なので、「php.iniのupload_max_filesizeのサイズを超えている」エラーになります。そこで、php.iniの中身を確認してみると、アップロードできる単一ファイルの最大サイズが「2M」になっていました。

upload_max_filesize = 2M

今回はそこが原因だったので、以下のようにphp.iniファイルを編集して無事エラーが解消されました

upload_max_filesize = 5M

重要パラメータの説明
upload_max_filesize : アップロードできる単一ファイルの最大サイズを指定するパラメータ
post_max_size : POSTリクエスト全体(ファイルとフォームデータを含む)の最大サイズを指定するパラメータ

※post_max_size は常に upload_max_filesize 以上の値に設定することが推奨

おわりに

今回の問題は単純なPHP設定の制限によるものでしたが、ここにたどり着くまでに少々時間がかかってしまいました。今後は以下の点を意識していきたいと思います。この他なにか注意点などありましたらご教授いただけると大変ありがたいです。

  1. ファイルアップロードエラーが発生した場合は、まずエラーコードを確認する
  2. サーバー設定(php.ini)の確認は基本中の基本
  3. 設定を変更した場合は、必ずウェブサーバーを再起動して反映させる

最後までご覧いただきありがとうございました!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?