PHPのファイルアップロード上限を変更する方法

PHPで画像や動画などのファイルをアップロードする機能を実装することがあります。そのときファイルサイズが大き過ぎるとエラーになってしまうことがあります。

今回は php.ini というファイルを使って、ファイルアップロード上限を上げる方法を見ていきます。

※ Cloud9などの開発環境で開発している場合はCloud9のターミナルで以下の設定をしてください。

今の上限を確認

PHPの各種設定は phpinfo に書かれています。今回はコマンドを使って設定を確認していきます。確認する設定は以下です。

  • file_uploads(ファイルアップロードを許可する項目)
  • post_max_size(POST データの最大サイズ)
  • upload_max_filesize(1ファイルあたりの最大アップロードサイズ)
  • memory_limit(メモリの使用容量)

以下のコマンドをターミナルで実行してください。このコマンドは phpinfo() を実行して特定の文字列がある行を grep (検索)しています。私の環境での結果も合わせて記載します。

file_uploadsを確認

$ php -r 'phpinfo();' | grep file_uploads
file_uploads => On => On
max_file_uploads => 20 => 20

file_uploadsOn になっていればOKです👍

一緒に検索に引っかかった max_file_uploads は同時にアップロード可能なファイルの最大数です。

post_max_sizeを確認

$ php -r 'phpinfo();' | grep post_max_size
post_max_size => 8M => 8M

デフォルトは 8M です👍

POST データの最大サイズは 8MB ということを表します

upload_max_filesizeを確認

$ php -r 'phpinfo();' | grep upload_max_filesize
upload_max_filesize => 2M => 2M

デフォルトは 2M です👍

1ファイルあたりの最大アップロードサイズは 2MB ということを表します。

memory_limitの確認

$ php -r 'phpinfo();' | grep memory_limit
memory_limit => 128M => 128M

memory_limitupload_max_filesizepost_max_size よりも大きい値である必要がありますので、注意してください 🙆‍♂️

php.iniの格納場所を確認

ファイルのアップロード上限を変更するため php.ini というファイルを編集します。 php.ini がどこにあるのかを調べます。以下のコマンドをターミナルで実行してください。

$ php -r "phpinfo();" | grep php.ini
Configuration File (php.ini) Path => /etc

これは php.ini/etc ディレクトリにあることを表しています。以下のコマンドを実行してディレクトリを移動してください。

$ cd /etc
$ ls

表示されたファイルの中に php.ini があるかどうかをチェックしてください。

php.iniが見当たらない場合(Macなど)

Macの場合は php.ini が見当たらず、 php.ini.default というファイルがあるかもしれません。

その場合は php.ini.default をコピーして名前を変更します。以下のコマンドを実行してください。

$ sudo cp php.ini.default php.ini
$ ls

php.ini が作成されていることを確認してください👍

php.iniに権限を与える

php.ini を編集する前に、ファイルに与えられている権限を確認します。以下のコマンドを実行してください。

$ ls -l | grep php.ini

私の環境では以下のような記述を見つけました。左側の -r--r--r-- が重要です。

-r--r--r--   1 root  wheel   71176  4  8 08:33 php.ini

ファイルの権限を変更するため、以下のコマンドを実行してください。

$ sudo chmod 644 php.ini

再度、 ls -l | grep php.ini で権限を確認して以下のように -rw-r--r-- になっていればOKです👍

-rw-r--r--   1 root  wheel   71176  4  8 08:33 php.ini

php.iniの編集

以下のコマンドを実行して編集します。

$ sudo vi php.ini

以下のようなupload_max_filesizepost_max_size の記述を探して、好きなファイルサイズに変更してください。

キーボードで i を押すと入力モードに切り替わるので、編集することができます。 (入力モードをやめるときは esc を押してください)

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
; 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

upload_max_filesizepost_max_sizememory_limit を超える場合には memory_limit も変更してください。

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

キーボードの esc を押して入力モードを終了し、 :wq を入力してエンターキーを押してください。(上書き保存を意味します)

php.iniの変更を確認

以下のコマンドを実行して phpinfo の情報が変更されていることを確認してください。(もしサーバが起動している場合は、一度停止させてください)

$ php -r 'phpinfo();' | grep post_max_size
$ php -r 'phpinfo();' | grep upload_max_filesize
$ php -r 'phpinfo();' | grep memory_limit

変更した内容に変わっていればOKです👍これでPHPのファイルアップロード上限を変更することができました。

まとめ

PHPで画像や動画などのファイルをアップロードする機能を実装する場合、上限値に注意が必要です。ファイルサイズが大き過ぎるとエラーになってしまうことがあります。

上限値を変更したい時にはphp.ini というファイルを変更します。