Was ist die Größenbeschränkung einer Post-Anfrage?

268

Entschuldigung, wenn dies ein Duplikat ist, würde ich denken, es wäre, aber ich konnte nichts finden.

Ich habe eine Flex-Anwendung, die Daten über den IE an einen PHP / MySQL-Server zurücksendet. Ich habe noch keine Probleme, aber wenn ich das vorher weiß, kann ich mir eine Menge Frustration und Arbeit ersparen. Gibt es eine Größenbeschränkung für das Posten von Daten über http?

Dieser Artikel sagt nein: http://www.netlobo.com/ie_form_submit.html

Diese Diskussion sagt ja: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

Und alles geht hin und her, was ich online finden kann. Also bitte Limit Antworten auf persönlich getestet / überprüft Zahlen.

Ich möchte eine XML-Zeichenfolge zurückschicken, die sehr groß sein kann (z. B. bis zu 5 MB).

Wenn es einen Unterschied macht: Browser ist immer IE (unser Produkt erfordert es), Post kommt von und httpService in Flex, Webserver ist PHP, DB ist MySQL.

invertedSpear
quelle

Antworten:

203

Dies hängt von einer Serverkonfiguration ab. Wenn Sie mit PHP unter Linux oder ähnlichem arbeiten, können Sie es mithilfe der .htaccess-Konfigurationsdatei wie folgt steuern:

#set max post size
php_value post_max_size 20M

Und ja, ich kann persönlich bestätigen, dass dies funktioniert :)

Wenn Sie IIS verwenden, habe ich keine Ahnung, wie Sie diesen bestimmten Wert festlegen würden.

inkedmn
quelle
3
Wo ist diese post_max_sizeEinstellung? Ich bin ziemlich neu in PHP und kann es nirgendwo in unserer Codebasis finden (mit dem DreamWeaver-Find-All-Prozess). Ich würde unsere Systemadministratoren fragen, aber sie sind gemein. :-P
invertedSpear
10
Können Sie diesen Wert einfach auf eine beliebige Größe einstellen? Gibt es keine Protokollbeschränkung? Können Sie es auf 999999999999999999999M einstellen?
Para
8
@Para - In diesem Beitrag heißt es, dass Sie den Speicher Ihres Computers so hoch einstellen können. Es heißt auch, dass der Standardwert 2 MB beträgt.
RustyTheBoyRobot
37
Da dies PHP ist, hatte ich erwartet, dass es jeden Wert akzeptiert und nur SEGFAULT, wenn es das Limit Ihrer Maschine erreicht ...
RustyTheBoyRobot
12
Außerdem gibt es in der PNP.INI-Datei eine Einstellung: max_input_vars, die in meiner Version von PHP: 5.4.16 standardmäßig 1000 ist. Aus dem Handbuch: "Wie viele Eingabevariablen können akzeptiert werden (Limit wird auf $ _GET, $ _POST und angewendet $ _COOKIE superglobal separat) "Ref.: Php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov
73

Der URL-Teil einer Anforderung (GET und POST) kann sowohl vom Browser als auch vom Server begrenzt werden. Im Allgemeinen beträgt die sichere Größe 2 KB, da es fast keine Browser oder Server gibt, die ein kleineres Limit verwenden.

Der Hauptteil einer Anforderung (POST) wird normalerweise * vom Server auf Byte-Basis begrenzt, um eine Art von DoS-Angriff zu verhindern (beachten Sie, dass das Entkommen von Zeichen die Byte-Größe des Hauptteils erhöhen kann). Die häufigste Servereinstellung ist 10 MB, obwohl alle gängigen Server dies über eine Einstellungsdatei oder ein Bedienfeld erhöhen oder verringern können.

* Bei älteren Mobiltelefonen oder anderen Browsern kleiner Geräte gibt es einige Ausnahmen. In diesen Fällen ist dies eher eine Funktion des für diesen Zweck reservierten Heap-Speicherplatzes auf dem Gerät als irgendetwas anderes.

David
quelle
2
Erzählen Sie etwas über die Browser-Grenzen, wenn man bedenktcurl
Yugal Jindle
12
Ich weiß, dass ich hier etwas hinter der Zeit zurückbleibe, aber Antworten wie diese sind der Grund, warum ich StackOverflow liebe. Über das Notwendige hinaus und mit wertvollen Hintergrundinformationen.
Siebenschläfer
50

Außerdem gibt es in der PHP.INI-Datei eine Einstellung:

max_input_vars

was in meiner Version von PHP: 5.4.16 standardmäßig 1000 ist.

Aus dem Handbuch: "Wie viele Eingabevariablen können akzeptiert werden (Limit wird separat auf $ _GET, $ _POST und $ _COOKIE Superglobal angewendet)"

Ref.: Http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars

Nikolay Ivanov
quelle
14

Sie können große Datenmengen veröffentlichen, indem Sie die Variable php.ini festlegen: Die max_input_vars Standardgröße dieser Variablen ist 1000. Wenn Sie jedoch große Datenmengen senden möchten, müssen Sie die Größe entsprechend erhöhen. Wenn Sie die Größe nicht über ini_set festlegen können, müssen Sie dies durch htaccessoder durch direkte Änderungen an der Datei php.ini tun.

max_input_vars  2500
memory_limit    256M
Nilesh Chourasia
quelle
5

Wie David betonte, würde ich in den meisten Fällen mit KB gehen.

php_value post_max_size 2KB

Hinweis: Mein Formular ist einfach, nur ein paar Textfelder, kein Langtext.

ChrisDeDavidMindflowAU
quelle
2

Standardmäßig hat die Post-Anfrage eine maximale Größe von 8 MB. Sie können es jedoch an Ihre Anforderungen anpassen. Die Änderung kann durch Öffnen der Datei php.ini (PHP-Konfigurationseinstellung) erfolgen.

Finden

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

Ersetzen Sie 8 gemäß Ihren Anforderungen.

Muhammad Ashfaq
quelle
1

Es ist Sache des http-Servers, zu entscheiden, ob es ein Limit gibt. Mit dem Produkt, an dem ich arbeite, kann der Administrator das Limit konfigurieren.

ChrisH
quelle
Außerdem gibt es in der PNP.INI-Datei eine Einstellung: max_input_vars, die in meiner Version von PHP: 5.4.16 standardmäßig 1000 ist. Aus dem Handbuch: "Wie viele Eingabevariablen können akzeptiert werden (Limit wird auf $ _GET, $ _POST und angewendet $ _COOKIE superglobal separat) "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

Als eine der besten Lösungen dafür verwenden Sie nicht mehrere oder mehr als 1.000 Eingabefelder. Sie können beispielsweise mehrere Eingaben mit einem beliebigen Sonderzeichen verknüpfen. @.

Sieh dir das an:

<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'>

Verwenden eines beliebigen Skripts (JavaScript oder 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

Damit umgehen Sie das max_input_varsProblem. Wenn Sie max_input_varsdie Datei php.ini vergrößern , ist dies für den Server schädlich, da mehr Server-Cache-Speicher verwendet wird. Dies kann manchmal zum Absturz des Servers führen.

Harpej
quelle
1
Ich sehe nicht, wie das Verketten von Variablen Speicher spart. Jedes ASCII-Zeichen verwendet 1 Byte Speicher. Ein String (technisch gesehen ein char-Array, wenn ich mich nicht irre) verwendet n * 1 Bytes mit n als Stringlänge. Warum würde das Hinzufügen eines weiteren Zeichens den verwendeten Speicher reduzieren? Bei dieser Berechnung würden Sie für jedes '@', das Sie der Zeichenfolge hinzufügen, ein weiteres Byte hinzufügen. Natürlich reduzieren Sie die Anzahl der verwendeten Variablen, aber Sie zahlen diesen "Gewinn" mit zusätzlicher Arbeit, indem Sie sie wieder aufteilen.
DBX12
2
@ DBX12 Während Sie mit diesem Trick keinen Speicher sparen, können Sie die max_input_varsOption in diesem php.inimit umgehen . Nicht genau, was gefragt wurde, aber immer noch nützlich.
RicoBrassers
Das Überschreiten der Größenbeschränkung hängt von zwei Faktoren ab: Erstens der Größe der einzelnen Schlüssel- / Wertzeichenfolgengröße, dh der Zeichenanzahl auf der Schlüssel- und / oder Werteseite. zweitens die Anzahl der Schlüssel / Wert-Paare, selbst wenn jedes Paar eine kleine Zeichenmenge hat. Insgesamt führen zwei der oben genannten Faktoren dazu, dass die Größenbeschränkung das Problem überschreitet. Für mich ist diese Antwort richtig und bezieht sich auf die Frage und hebt eine Seite eines Problems hervor.
Elnur Shabanov
0

Für Entwickler, die die PHP-Konfiguration aufgrund des Webhosting nicht ändern können. (Meine Einstellungen 256 MB maximale Größe, 1000 maximale Variablen)

Ich habe das gleiche Problem, dass nur 2 von 5 Big-Data-Objekten (assoziative Arrays) mit Unterstrukturen auf der Serverseite empfangen wurden.

Ich finde heraus, dass die gesamte Unterstruktur in der Post-Anfrage "abgeflacht" wird. Ein Objekt wird also zu Hunderten von Literalvariablen. Am Ende werden anstelle von 5 Objektvariablen in Wirklichkeit Dutzende von Hunderten elementaren Variablen gesendet.

In diesem Fall besteht die Lösung darin, jede der Unterstrukturen in String zu serialisieren . Dann wird es auf dem Server als 5 String Variablen empfangen. Beispiel: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Mira Nedved
quelle