PHPで作成されたフォームでPOST送信したときに、取得側でデータが全て取得できない。
しかしプログラムは間違っていない。誤字脱字もない。。。
そんなときは、たいていPHPの設定による不具合です。
このようなときは、下記の設定を確認してみてください。
max_input_vars
max_file_uploads
memory_limit
post_max_size
upload_max_filesize
送信するデータが、これらの設定値を超えているため正しく送信できない可能性があります。
当記事では、これらの設定方法を紹介しています。
php.iniは以下の場所にあります。
[CentOS]
/etc/php.ini
[FreeBSD]
/usr/local/etc/php.ini
[MacOS]
/etc/php.ini
なければ、以下のようにしてコピーして作成します。
cp php.ini-production /etc/php.ini
入力変数を最大何個まで受け入れるかを指定します。
例えば、1000と設定していた場合に1200の変数を送信した場合は、1000まで取得してそれ以降のデータはリクエストから削除されます。
max_input_varsは、PHP 5.3.9 以降で有効となります。
[設定例]
max_input_vars = 2000
同時にアップロードできるファイルの最大数を指定します。
例えば、20と設定していた場合に30のファイルのアップロードを試みた場合は、20までアップデートされ、それ以降のファイルはリクエストから削除されます。
何もファイルを指定せずに送信されたフィールドは、数に含みません。
max_file_uploadsは、PHP 5.2.12 以降で利用可能となります。
[設定例]
max_file_uploads = 30
使用できるメモリの最大値を指定します。
post_max_size、upload_max_filesizeより大きな値を設定する必要があります。
「memory_limit > post_max_size > upload_max_filesize」このようになっていないと意味がありません。
例えば、post_max_sizeで200Mと設定していてもmemory_limitが100Mとなっていたら、結果メモリが100Mしか使えないのでPOSTできる容量も100Mまでとなるためです。
[設定例]
memory_limit = 256M
POSTデータの最大サイズを指定します。
この値は、ファイルのアップデートも含みます。
大きなファイルをアップデートする場合、この値はupload_max_filesizeより大きな値を設定する必要があります。
[設定例]
post_max_size = 126M
アップロードするファイルの最大サイズを指定します。
複数のファイルをアップロードする場合は、そのファイルの合計サイズが対象となります。
[設定例]
upload_max_filesize = 96M