2012-04-02 5 views
2

約1500個の入力フィールド*(テキストまたは非表示)を持つhtmlフォームがあります。 form.actionはPOSTであり、すべての入力フィールドには一意の名前があります(名前= foo [])。PHPと(あまりにも)多くの入力フィールド

フォームが送信された後、PHPで$ _REQUESTのすべての変数を印刷しようとすると、最初の数エントリだけが表示されます。実際、$ _REQUEST変数には1001個の項目しか含まれていません(約500個のフィールドが欠落しています)。

これはどうして起こりますか?

データはポストしないで送信されるため、URLの制限は問題にはなりません。だから、私はそれにはウェブサーバーの設定で何かがあったと思っており、そのリクエストは大きすぎると思った。しかし、LimitRequestBodyを0に設定しても、結果は変わりません。

このPHP配列で使用されているメモリに関しては、サイズが全体のメモリによってのみ制限されていることが読み取れます。 (キーはそれぞれ約20本で、値はそれぞれ約6個です)

私は何かを見逃しますか?

*場合は、あなたが疑問に思う:(ネストされた場合の順序と親のための1つに1つの位置)のナビゲーションは、約750のエントリー、エントリーごとに2つのフィールドで構成されてい

+5

1500の入力フィールドが必要ですか? –

+1

どのバージョンのPHPとWebサーバーを使用していますか? – Timur

+2

セクションをフォームに分割するのはどうでしょう... 1500はあまりにも一度に一度に変更するのが大変です。ユーザーとサーバーの方が優れています。 – MakuraYami

答えて

5

を入れ子にするためのフラグでもあり、あなたの.htaccessファイルに追加するか、php.iniの

php_flag max_input_vars 1500 

を変更入力変数の数が制限されます。デフォルトの設定は1000です。また、similar settingもあるので、Suhosinがインストールされているかどうかを確認してください。

可能であれば、フィールド数を減らすことをお勧めしますが、

+0

PHP 5.3.3-7がインストールされていますが、これらの属性は設定内にあります。それらを2000に設定すると問題が解決しました –

+0

PHP 5.3。3-7はDebianセキュリティチームによって管理されている従来のディストリビューションで、PHP 5.3.3 +の最新のセキュリティ修正です。 – mbh

0

post_max_size値のためにあなたのphp.iniの設定を確認します - おそらくあなたはそれを超えましたか?

1

おそらくPOSTのサイズを超えていますか?あなたは人がファイルを投稿しているように、多分martを使うことができます。

+0

また、IISでは200kbのチェックしかできないようです。http://stackoverflow.com/questions/2880722/is-http-post-limitless – Jonathan

+0

マルチパートフォームを使用することをお勧めしました。しかし、tranver/eddyはより強固な解決策を持っているようです。 – Tei

2

php_flag max_input_varsをオーバーライドしてください。

PHPは "max_input_vars" と呼ばれる新しい構成設定があります5.3.9以来

php_flag max_input_nesting_level 64 
関連する問題