2010-03-02 7 views
218

Sorry, wenn das Duplikat ist, würde ich denken, es wäre, aber konnte nichts finden.Was ist die Größenbeschränkung einer Postanforderung?

Ich habe eine Flex-Anwendung, die ich Daten zurück zu einem PHP/MySQL-Server über IE posten. Ich habe noch keine Probleme gesehen, aber wenn ich das im Voraus weiß, könnte das mir eine Menge Frust und Arbeit ersparen. Gibt es eine Größenbeschränkung für die Veröffentlichung von Daten über http? keine

Dieser Artikel sagt: 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 bin in der Lage, online zu finden. So bitte begrenzen Antworten auf persönlich getestete/verifizierte Zahlen.

Ich möchte eine XML-Zeichenfolge zurückgeben, die ziemlich groß sein kann (sagen wir bis zu 5 MB).

Wenn es einen Unterschied macht: Browser wird immer IE sein (unser Produkt benötigt es), Post kommt von und httpService in flex, Webserver ist PHP, DB ist mySql.

+5

http://stackoverflow.com/questions/2276759/php-whats-the-total-length-of-a-post-global-variable – karim79

+0

Dank Karim, ich denke, ich hatte meine Suchbegriffe nicht richtig zu hol das auf. – invertedSpear

Antwort

174

Es hängt von einer Serverkonfiguration ab. Wenn Sie mit PHP unter Linux oder ähnlich arbeiten, können Sie sie steuern .htaccess Konfigurationsdatei, etwa so:

#set max post size 
php_value post_max_size 20M 

Und, ja, ich persönlich kann die Tatsache bestätigt, dass dies funktioniert :)

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

+3

Wo ist diese 'post_max_size' Einstellung? Ich bin ziemlich neu in PHP und ich kann es nirgends in unserer Code-Basis finden (mit dem dreamWeaver find-all-Prozess). Ich würde unsere Systemadministratoren fragen, aber sie sind gemein. :-P – invertedSpear

+1

@invertedSpear Es ist in der PHP-Konfigurationsdatei Ihres Webservers, z. auf unserem Linux-Server ist es /etc/php5/cgi/php.ini – Alan

+8

Also kannst du diesen Wert auf jede Größe einstellen? Gibt es keine Protokollbeschränkung? Kannst du es auf 999999999999999999999M setzen? – Para

1

Es obliegt dem http-Server zu entscheiden, ob es ein Limit gibt. Das Produkt, an dem ich arbeite, erlaubt dem Administrator das Limit zu konfigurieren.

+0

Auch gibt in PNP.INI-Datei ist eine Einstellung: max_input_vars , die in meiner Version von PHP: 5.4.16 Standardwerte bis 1000. Aus dem Handbuch: „Wie viele Eingangsvariablen angenommen werden können (Grenze angewendet auf $ _GET, $ _POST und $ _COOKIE superglobal separat) " Ref .: [http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars][1 ] [1]: http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars –

64

Der URL-Teil einer Anfrage (GET und POST) kann sowohl vom Browser als auch vom Server begrenzt werden - im Allgemeinen ist die sichere Größe 2KB, da es kaum Browser oder Server gibt, die ein kleineres Limit verwenden.

Der Hauptteil einer Anfrage (POST) wird normalerweise * vom Server auf Byte-Basis begrenzt, um eine Art DoS-Attacke zu verhindern (beachten Sie, dass Zeichen-Escaping die Byte-Größe des Körpers erhöhen kann). Die am häufigsten verwendete Servereinstellung ist 10 MB, obwohl dies bei allen gängigen Servern über eine Einstellungsdatei oder ein Panel erhöht oder verringert werden kann.

* Einige Ausnahmen gibt es bei älteren Mobiltelefonen oder anderen kleinen Geräte-Browsern - in diesen Fällen ist es eher eine Funktion des für diesen Zweck reservierten Heap-Speicherplatzes auf dem Gerät als alles andere.

+2

Erzählen Sie etwas über die Browser-Grenzen, unter Berücksichtigung 'curl' –

+5

Ich weiß Ich bin ein bisschen hinter der Zeit hier aber Antworten wie diese sind die Re Ich liebe StackOverflow. Über das hinaus, was benötigt wird und einige wertvolle Hintergrundinformationen liefern. – Dormouse

5

Wie David darauf hingewiesen hat, 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, nicht lange Text.

34

Auch in der php.ini-Datei gibt es eine Einstellung:

max_input_vars 

die in meiner Version von PHP: 5.4.16 Standardwerte bis 1000.

Aus dem Handbuch: "Wie viele Eingangsvariablen angenommen werden können (Limit auf $ _GET wird _POST und _COOKIE superglobalen separat $ $ angewandt)"

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

-1

Eines der besten Dafür verwenden Sie nicht mehrere oder mehr als 1.000 Eingabefelder. Sie können mehrere Eingaben mit einem beliebigen Sonderzeichen verketten, z. @.

sehen:

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

mit einem beliebigen Script (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 erhalten Sie die max_input_vars Problem umgehen. Wenn Sie max_input_vars in der php.ini-Datei erhöhen, ist das für den Server schädlich, da es mehr Server-Cache-Speicher verwendet, und dies kann manchmal den Server zum Absturz bringen.

+1

Ich sehe nicht, wie Verkettung von Variablen Speicher spart. Jedes ASCII-Zeichen verwendet 1 Byte Speicher. Eine Zeichenkette (technisch ein char-Array, wenn ich mich nicht irre) verwendet n * 1 Bytes mit n als Zeichenkettenlänge. Warum würde das Hinzufügen eines anderen Zeichens den verwendeten Speicher reduzieren? In 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

+1

@ DBX12 Während Sie mit diesem Trick keinen Speicher speichern, können Sie damit die Option 'max_input_vars' in der' php.ini' umgehen. Nicht genau, was gefragt wurde, aber immer noch nützlich. – RicoBrassers

9

Sie können große Datenmengen einstellen, indem Sie die Variable php.ini einstellen: max_input_vars Die 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 nicht die Größe von ini_set einstellen können, müssen Sie es über htaccess tun oder Änderungen direkt in der Datei php.ini vornehmen.

max_input_vars 2500 
memory_limit 256M 
1

Die Postanforderung hat standardmäßig eine maximale Größe von 8 MB. Aber Sie können es entsprechend Ihren Anforderungen ändern. Die Änderung kann durch Öffnen der php.ini-Datei (php configuration setting) erfolgen. nach Ihren Anforderungen

Finden

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

8 ersetzen.

Verwandte Themen