トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

PHP で引数が多い場合

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]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2014年12月06日 14時35分33秒