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?

More than 3 years have passed since last update.

PHPでアップロードできるファイルの上限値を変更する

Posted at

背景

PHP×nginxの案件でファイルをうまくアップロードできないことがあり、アップロードする際に許容上限に引っかかっていることが判明。
PHPとnginxの設定をそれぞれ変更してあげる必要があったので、その手順を記載。

PHPの設定を変更

PHPの設定を確認

まずはphpinfo()でPHPの設定を確認。
以下内容のファイルをブラウザで表示できる任意のディレクトリ下に設置して、PHPの設定を確認。

phpinfo.php
<?php
phpinfo();

phpinfoが開かれたら、下記5項目の設定値を確認。

①file_uploads
 ファイルのアップロードの有効/無効(※Onで有効)
②max_file_uploads
 一度にアップロードできるファイル総数
③memory_limit
 メモリ上限
④post_max_size
 一度にアップロードできるファイル合計サイズ
⑤upload_max_filesize
 1ファイルの容量上限

※それぞれの詳細な説明はPHPマニュアルで確認をお願いします。

PHPの設定を変更

今回はupload_max_filesize(1ファイルの容量上限)の設定が原因だったのでここの値を変更。(※デバック方法は最後の補足に記載してます。)
今回はphp.iniを直接編集して設定を変更。

php.ini
upload_max_filesize = 8M

ここで注意なのが、公式マニュアルに下記のようなメッセージがあるので要チェック。

・一般的に memory_limit は、 post_max_sizeよりも大きくする必要があります。
・post_max_size には、 upload_max_filesizeより大きな値を指定しなければいけません。

つまり、

memory_limit > post_max_size > upload_max_filesize

の関係になるように値設定が必要。

PHPの設定を反映

php.iniを変更した後は、設定を反映させるためにphp-fpmを再起動。

sudo systemctl restart php-fpm

php-fpmを再起動後、phpinfoで変更した値が反映されていればOK。

nginxの設定を変更

PHPの設定を変更して、いざアップロード!
しかし未だにアップロードがうまくできず、、、

調べた結果、nginxの設定も変更が必要みたい。

nginxで許容するアップロードサイズ

nginx公式によると、 nginx ではデフォルトで1MBまでのファイルしか受け付けない設定になっているよう。

nginx で1MBより大きなファイルをアップロードできるようにするには、 confファイルに client_max_body_size ディレクティブを設定。

hoge.conf
server {
    listen       80;
    server_name  localhost;

    client_max_body_size 8M;

    location / {
    ・・・

nginxの設定を反映

confファイルを変更した後は、設定を反映させるためにnginxを再起動。

再起動する前に記述に誤りがないか確認。
設定ファイルに問題がなければ、以下のように表示されます。

nginx -t
> nginx: the configuration file /etc/nginx/hoge.conf syntax is ok
> nginx: configuration file /etc/nginx/hoge.conf test is successful

設定ファイルに問題がなければnginxを再起動。

sudo systemctl restart nginx

これで無事にアップロードできるようになった…!

補足

今回の記事の内容とは逸れるので、最後にファイルアップロード時のデバックについて記載。

ファイルのアップロードに失敗した際、PHP側でエラーコードが返されるので、それを参考にすると原因が分かりやすい。

今回、$_FILEの値をみるとこうなってた。

Array
(
    [0] => Array
        (
            [name] =>
            [type] =>
            [tmp_name] =>
            [error] => 2
            [size] =>
        )
)

公式マニュアルより、エラー番号2(アップロードしたファイルがMAX_FILE_SIZE を超えている)が返ってきているので、
アップロードしようとしたファイルサイズが設定値を超えていることが判明しました。

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?