投稿リクエストのサイズ制限は何ですか?


268

これが重複している場合は申し訳ありませんが、重複していると思いますが、何も見つかりませんでした。

IEを介してphp / mysqlサーバーにデータをポストバックするflexアプリケーションがあります。私はまだ問題に遭遇していませんが、これを前もって知っていれば、私はフラストレーションと仕事の多くを節約できます。http経由でデータを投稿するのにサイズ制限はありますか?

この記事はノーと言いますhttp : //www.netlobo.com/ie_form_submit.html

このディスカッションには「はい」と書かれています。http: //bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

そして、それはすべて私がオンラインで見つけることができるものを行ったり来たりします。そのため、回答は個人的にテスト/検証された数に限定してください

非常に大きくなる可能性があるXML文字列をポストバックしたい(たとえば、最大5MB)。

それが何らかの違いを生む場合:ブラウザは常にIE(私たちの製品はそれを必要とします)、投稿はフレックスのhttpServiceから来ており、Webサーバーはphp、DBはmySqlです。


回答:


203

サーバー構成によって異なります。LinuxなどでPHPを使用している場合は、.htaccess設定ファイルを使用して次のように制御できます。

#set max post size
php_value post_max_size 20M

そして、はい、私はこれがうまくいくという事実を個人的に証明することができます:)

IISを使用している場合は、この特定の値をどのように設定するのかわかりません。


3
このpost_max_size設定はどこにありますか?私はphpを初めて使用するので、コードベースのどこにも見つかりません(dreamWeaverのfind-allプロセスを使用)。私のシステム管理者に尋ねますが、彼らは意地悪です。:-P
反転

10
この値を任意のサイズに設定できますか?プロトコルの制限はありませんか?999999999999999999999Mに設定できますか?
パラ

8
@Para- この投稿によると、マシンのメモリと同じくらい高く設定できます。また、デフォルトは2MBです。
RustyTheBoyRobot

37
これはPHPなので、マシンの制限に達したときに、どんな値でもSEGFAULTだけを受け入れると思っていました
。– RustyTheBoyRobot

12
また、PNP.INIファイルには次の設定があります。私のバージョンのPHPでは、デフォルトで1000に設定されているmax_input_vars。 $ _COOKIE superglobal別々) "Ref .: php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov

73

リクエストのURL部分(GETおよびPOST)は、ブラウザーとサーバーの両方で制限できます。より小さな制限を使用するブラウザーやサーバーはほとんどないため、一般に安全なサイズは2KBです。

リクエストの本文(POST)は、通常、サーバーによってバイトサイズベースで制限されます。これは、DoS攻撃のタイプを防ぐためです(これは、文字のエスケープによって本文のバイトサイズが増える可能性があることを意味します)。最も一般的なサーバー設定は10MBですが、一般的なすべてのサーバーでは、設定ファイルまたはパネルを介してこれを増減できます。

*一部の例外は、古い携帯電話や他の小さなデバイスのブラウザーに存在します-そのような場合、それは、デバイス上のこの目的のために予約されたヒープ領域の機能よりも他のものです。


2
考慮して、ブラウザーの制限について何かを伝えてくださいcurl
Yugal Jindle

12
私はここで少し遅れていることを知っていますが、このような答えがStackOverflowが好きな理由です。何が必要かを超えて、いくつかの貴重な背景情報を提供します。
ヤマネ2013年


14

php.ini変数を設定することで、大量のデータを送信できます。max_input_vars この変数のデフォルトサイズは1000ですが、大量のデータを送信する場合は、それに応じてサイズを増やす必要があります。ini_setからサイズを設定できない場合は、htaccessphp.iniファイルを直接変更するか、変更する必要があります。

max_input_vars  2500
memory_limit    256M

5

Davidが指摘したように、ほとんどの場合、KBを使用します。

php_value post_max_size 2KB

注:私のフォームはシンプルで、テキストボックスがいくつかあり、長いテキストではありません。


2

デフォルトでは、postリクエストの最大サイズは8MBです。ただし、要件に応じて変更できます。変更は、php.iniファイル(php構成設定)を開いて行うことができます。

探す

post_max_size=8M  //for me, that was on line:771

要件に応じて8を置き換えます。


1

制限があるかどうかを判断するのは、httpサーバーです。私が取り組んでいる製品では、管理者が制限を構成できます。


また、PNP.INIファイルには次の設定があります。私のバージョンのPHPでは5.4.16がデフォルトであるmax_input_varsです。マニュアルから:「受け入れられる入力変数の数($ _GET、$ _ POSTおよび$ _COOKIE superglobal別々) "Ref .: [ php.net/manual/en/info.configuration.php#ini.max-input-vars][1] [1]:php.net/manual/en/info.configuration .php#ini.max-input-vars
Nikolay Ivanov

1

これに対する最良の解決策の1つは、複数または1,000を超える入力フィールドを使用しないことです。たとえば、複数の入力を任意の特殊文字と連結できます。@

これを見てください:

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

任意のスクリプト(JavaScriptまたはJScript)を使用して、

document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

これで、max_input_vars問題を回避できます。max_input_varsphp.iniファイルを増やすと、サーバーキャッシュメモリをより多く使用するため、サーバーに悪影響を及ぼし、サーバーがクラッシュすることがあります。


1
変数を連結してメモリを節約する方法はわかりません。各ASCII文字は1バイトのメモリを使用します。文字列(私が誤っていない場合は技術的にはchar配列)では、n * 1バイトを使用し、文字列の長さはnです。別のキャラクターを追加すると、使用されるメモリが減るのはなぜですか?この計算では、文字列に追加する「@」ごとに1バイトずつ追加します。もちろん、使用する変数の数を減らしますが、追加の作業でそれらを再度分割することで、この「勝利」を支払います。
DBX12 2016年

2
@ DBX12このトリックではメモリを節約しませんが、これでのmax_input_varsオプションをバイパスできますphp.ini。正確ではありませんが、尋ねられた内容はまだ役に立ちます。
RicoBrassers 2017

サイズ制限の超過は、2つの要因に依存します。最初に、個々のキー/値の文字列サイズ、つまりキー側および/または値側の文字数。次に、各ペアの文字数が少ない場合でも、キーと値のペアの量。上記の2つの要因は全体として、サイズ制限が問題を超えることになります。だから、私にとって、この答えは正しく、質問に関連していて、問題の片側を強調しています。
Elnur Shabanov

0

ウェブホスティングのためにphp設定を変更できない開発者向け。(私の設定256MB最大サイズ、1000最大変数)

同じ問題が発生しましたが、サブ構造を持つ5つのビッグデータオブジェクト(連想配列)のうち2つだけがサーバー側で受信されました。

ポストリクエストで部分構造全体が「平坦化」されていることがわかります。したがって、1つのオブジェクトが数百のリテラル変数になります。最後に、5つのオブジェクト変数の代わりに、実際には数十の要素変数を送信しています。

この場合の解決策は、各部分構造を文字列にシリアル化することです。次に、5つの文字列変数としてサーバーで受信されます。例: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.