多数のフィールドを送信しようとしたときに、少し問題が発生しました。max_input_vars
そこで、php.iniのオプションの動作をテストするスクリプトを作成しました。
それは私を混乱させます。
これは私のコードです:
<!doctype html>
<html>
<body>
<?php
$t = array();
if(isset($_POST['t'])) { $t = $_POST['t']; }
echo "POST-VARS COUNT: ". count($_POST)." <br />";
echo "POST-VARS[t] COUNT: ". count($t)." <br />";
echo "ini_get('max_input_vars'): ". ini_get("max_input_vars"). "<br />";
echo "ISSET(\$_POST['submit']): ". (isset($_POST['submit']) ? "TRUE" : "FALSE"). "<br />";
echo "<br />";
echo "<form method='post' action='{$_SERVER['PHP_SELF']}'>\n";
for($j = 0; $j < 2000; $j++) {
for($i = 0; $i < 10; $i++) {
echo "<input type='hidden' name='t[$j][$i]' value='$i' />\n";
}
}
echo "<input type='submit' name='submit' value='test'>\n";
echo "</form>\n";
?>
</body>
</html>
PHP 5.2 と PHP 5.4 でテストしましたが、奇妙な違いがあります。php.ini 設定では 5000 しか許可されていませんが、PHP 5.2 を使用すると 20000 フィールドすべてが送信されるようです。
PHP バージョン 5.2.17 の出力:
POST-VARS COUNT: 2
POST-VARS[t] COUNT: 2000
ini_get('max_input_vars'): 5000
ISSET($_POST['submit']): TRUE
PHP バージョン 5.4.30 の出力:
POST-VARS COUNT: 1
POST-VARS[t] COUNT: 500
ini_get('max_input_vars'): 5000
ISSET($_POST['submit']): FALSE
質問は:
PHPがこのように動作する理由を知っている人はいますか? PHP 5.2のバグですか?