1

多数のフィールドを送信しようとしたときに、少し問題が発生しました。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のバグですか?

4

1 に答える 1