schedule2019-11-19

アップロードファイルに関するphp.iniの設定

アップロードファイルに関するphp.iniの設定をまとめます。

環境

  • PHP 7.3.8
    • php.x86_64 7.3.8-1.el7.remi @remi-php73
  • CentOS 7.6
  • Apache/2.4.6

設定ファイルはデフォルトで/etc/php.iniにあります。

アップロードファイルに関する設定

基本的には3つの設定を確認しておくと良いです。

variable default※ description
memory_limit 128MB メモリ使用量の上限
post_max_size 8MB POSTデータの最大サイズ ※1回のアップロードファイルすべての合計サイズ
upload_max_filesize 2MB 1ファイルあたりの最大アップロードサイズ

※環境で紹介したPHPのバージョンでデフォルトになっていた値です。

最近のスマホのカメラだと画像が3MB超えるサイズにもなるためupload_max_filesizeはもう少し大きくても良いですね。 大きなサイズを配信したくない場合は、PHPでもリサイズできます。
PHPで画像のリサイズ&圧縮する方法を比較する - Qiita

以下はphp.iniで書かれていた場所と説明を示します。 コメントはphp.netから抜粋しています。

memory_limit

スクリプトが確保できる最大メモリをバイト数で指定します。

404行目辺り

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M

もし、使用可能メモリに制限を設けたくない場合は、 ここに-1を指定してください。

post_max_size

POSTデータに許可される最大サイズを設定します。

660行目辺り

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M

一般的にmemory_limitは、post_max_sizeよりも大きくする必要があります。 POSTデータの大きさが、post_max_sizeより大きい場合、POST_POST`と _FILES superglobals`は空になります。

upload_max_filesize

アップロードされるファイルの最大サイズ。

842行目辺り

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

整数の場合の単位はバイト。

この近辺に要件によっては気にする必要がある設定があるので紹介します。

828行目辺りから

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

HTTPファイルアップロードを有効とするかどうか。

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

ファイルアップロード時にファイル保存に用いるテンポラリディレクトリ。 PHPの実行ユーザーが書きこみ可能である必要があります。

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

同時にアップロードできるファイルの最大数。

参考