http://stackoverflow.com/questions/12169818/in-php-how-can-i-detect-that-input-vars-were-truncated-due-to-max-input-vars-be
http://php.net/manual/ja/info.configuration.php
引数の制限
max_input_vars で指定された数以上の引数を受け取るとWarningを出力し、
引数をそれ以上受け取らない。
大量の引数を受け取らないような設計にするのが無難。
検知
max_input_vars 以上の引数があるかどうかを検知する方法
方法1
処理の冒頭でWarningを含むエラーの存在を確認する。
max_input_vars 以外のエラーやワーニングも拾ってしまうので注意。
if (($error = error_get_last()) !== null) {
echo 'got error:';
var_dump($error);
return;
}
方法2
引数の数をチェックする。
function checkMaxInputVars()
{
$max_input_vars = ini_get('max_input_vars');
# Value of the configuration option as a string, or an empty string for null values, or FALSE if the configuration option doesn't exist
if($max_input_vars == FALSE)
return FALSE;
$php_input = substr_count(file_get_contents('php://input'), '&');
$post = count($_POST, COUNT_RECURSIVE);
echo $php_input, $post, $max_input_vars;
return $php_input > $post;
}
対策
大量のデータを送らなければならないときは、max_input_vars の上限を上げるか
jsonを送る
jsonでデータを送る
http://d.hatena.ne.jp/hiro_nemu/20090826/1251284397
// フォームを取得
var form = $('form-id');
var param = {};
// フォームの内容を取得
// serializeArrayの戻り値は[{key: 'キーの名前', value: '値'}]という形式になっている
$(form.serializeArray()).each(function(i, v) {
param[v.name] = v.value;
});
var json = JSON.stringify(param);
php側は
var_dump(json_decode($_POST["json"]));
[カテゴリ: プログラミング言語 > PHP]
[通知用URL]
Tweet
最終更新時間:2014年12月06日 14時35分33秒