2012年11月14日水曜日

PHP フォームでアップロードできるファイル数の上限

ちょいとハマったので覚書です。

PHP は CentOS 5.7 の標準である 5.1.6 を使用しています。

フォームに <input type="file" /> を30個ほど並べたところ、$_FILES に20個分しか入っていません???

アップロードできるファイル数に制限があったかなぁと調べてみたのですが見当たりません???

ファイルアップロード設定オプション
名前デフォルト変更可能変更履歴
file_uploads"1"PHP_INI_SYSTEMPHP <= 4.2.3 では PHP_INI_ALL、PHP 4.0.3 以降で利用可能
upload_tmp_dirNULLPHP_INI_SYSTEM
max_input_nesting_level64PHP_INI_PERDIRPHP 5.3.9 以降で利用可能。
max_input_vars1000PHP_INI_PERDIRPHP 5.3.9 以降で利用可能。
upload_max_filesize"2M"PHP_INI_PERDIRPHP <= 4.2.3 では PHP_INI_ALL
max_file_uploads20PHP_INI_SYSTEMPHP 5.2.12 以降で利用可能。

上記を見ると 5.2.12 以降では php.ini の設定で変えられるようです。

PHP_INI_SYSTEM となっていますので、httpd.conf のバーチャルホスト設定に下記の1行を追加
php_value max_file_uploads  40

アパッチを再起動してみましたが状況が変わりません。

やっぱ、5.1.6 では実装されていないのかな?と思いましたが諦めきれずに php.ini に直接書いてやりました。

アパッチを再起動すると全部取得できるではないですか!?

max_file_uploads は 5.1.6 でも効果はあるが、php.ini に直接書かなければならないということのようです。