PHPエラー「PHP Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0」の原因と解決方法

PHPでファイルのアップロードを行う時に、

PHP Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0

といったエラーが出てアップロードができない時がある。

このエラーの原因は、php.iniで設定できるmax_file_uploadsの値に問題があるので、max_file_uploadsを適切な値に変更することで問題が解決する。

まずは、このような場合、phpinfoでmax_file_uploadsを確認する。

max_file_uploadsで設定されている数値は、PHPでファイルを同時に何ファイルまでアップロードできるか、という最大値となる。

Webページ内にファイルの登録欄を30個設けていて、それらを1回のsubmitで処理しようとするのであれば、max_file_uploadsは30以上の数値になっている必要がある。

もし、max_file_uploadsの設定を20にしてファイルを30個登録しようとしたら、ファイルのうち20個までは登録に成功し、21個目以降の登録に失敗する、ということになってしまう。

max_file_uploadsの数値を変更するには、php.iniを編集することになる。

30に設定したい場合は、php.iniでは

max_file_uploads = 30

と指定する。(設定を反映するにはApacheの再起動が必要。)

CentOS 5でパッケージインストールしたPHP5.1.6のphp.iniなど、php.iniの中にmax_file_uploadsの記述がない場合は、「max_file_uploads = 数値」を新規に追加することになる。

max_file_uploadsのデフォルト(初期値)は20になっているようなので、max_file_uploadsの設定を知らなければ、「PHPではファイルが20個までしか登録できない。21個以上登録できない。何故だろう。」と悩むことになってしまう。(私も昔困ったことがあった。最近、困っている人を見かけたので、この設定のことを思い出した。)

PHPのマニュアルを参照すると、PHP 5.3.4以降に仕様が変わったことが書いてあり、少し面白い、と思った。

《参考》「コア php.ini ディレクティブに関する説明」
http://php.net/manual/ja/ini.core.php

max_file_uploadsinteger 
同時にアップロードできるファイルの最大数。 PHP 5.3.4 以降、何もファイルを指定せずに送信されたアップロードフィールドは ファイル数に数えられなくなりました。

これまでは、ファイルアップロード欄(アップロードフィールド)の数とmax_file_uploadsの数を一致させる、という意識を持ちやすかったのだが、上記の仕様に変わると、そのような意識を持つ人が減るかもしれない。

もし、ファイルアップロード欄(アップロードフィールド)が21個以上あるが、いつも使うのは20個以内、そしてファイルアップロード欄の最大数でのファイル登録テストをしなかった、というような場合、max_file_uploadsの数値を本来は30にしておかないといけないのに、デフォルトの20のままで長期間運用してしまい、ある日、21個以上登録する機会がやってきた時に「登録できない」と困ることがありそうだ。・・・と言ったことを考えつつも、PHP5.1.6でも結局同じことで困っている人をよく見かけるので、上記の仕様変更により、かえって困る人が増える、ということはないのかもしれない。

前へ

2週間のうち4時間30分だけ自宅に戻った

次へ

Linuxでのwget実行時にプロキシを指定する方法