Quelle est la taille limite d'une demande de publication?

268

Désolé s'il s'agit d'un doublon, je pense que ce le serait, mais je n'ai rien trouvé.

J'ai une application flexible sur laquelle je poste des données sur un serveur php / mysql via IE. Je n'ai pas encore rencontré de problèmes, mais le savoir à l'avance pourrait me faire économiser beaucoup de frustration et de travail. Y a-t-il une taille limite pour publier des données via http?

Cet article dit non: http://www.netlobo.com/ie_form_submit.html

Cette discussion dit oui: http://bytes.com/topic/php/answers/538226-what-maximum-limit-using-post-method

Et tout cela va et vient ce que je peux trouver en ligne. Veuillez donc limiter les réponses aux nombres personnellement testés / vérifiés.

Je souhaite publier une chaîne XML qui peut être assez grande (disons jusqu'à 5 Mo).

Si cela fait une différence: le navigateur sera toujours IE (notre produit l'exige), le post vient de et httpService en flex, le serveur web est php, DB est mySql.

inverséSpear
la source

Réponses:

203

Cela dépend de la configuration d'un serveur. Si vous travaillez avec PHP sous Linux ou similaire, vous pouvez le contrôler en utilisant le fichier de configuration .htaccess, comme ceci:

#set max post size
php_value post_max_size 20M

Et, oui, je peux personnellement attester que cela fonctionne :)

Si vous utilisez IIS, je n'ai aucune idée de la façon dont vous définiriez cette valeur particulière.

inkedmn
la source
3
Où est ce post_max_sizeparamètre? Je suis assez nouveau sur php et je ne le trouve nulle part dans notre base de code (en utilisant le processus de recherche de tout de dreamWeaver). Je demanderais à nos administrateurs système mais ils sont méchants. :-P
invertedSpear
10
Alors, pouvez-vous simplement définir cette valeur à n'importe quelle taille? N'y a-t-il aucune sorte de limitation de protocole? Pouvez-vous le régler sur 99999999999999999999999M?
Para
8
@Para - Ce message dit que vous pouvez le définir aussi haut que la mémoire de votre machine. Il indique également que la valeur par défaut est 2 Mo.
RustyTheBoyRobot
37
Puisque c'est PHP, je m'attendais à ce qu'il accepte n'importe quelle valeur et juste SEGFAULT quand il atteint la limite de votre machine ....
RustyTheBoyRobot
12
De plus, dans le fichier PNP.INI, il y a un paramètre: max_input_vars qui dans ma version de PHP: 5.4.16 par défaut à 1000. D'après le manuel: "Combien de variables d'entrée peuvent être acceptées (la limite est appliquée à $ _GET, $ _POST et $ _COOKIE superglobal séparément) "Réf.: Php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov
73

La partie URL d'une demande (GET et POST) peut être limitée à la fois par le navigateur et le serveur - généralement la taille de sécurité est de 2 Ko car il n'y a presque pas de navigateurs ou de serveurs qui utilisent une limite plus petite.

Le corps d'une requête (POST) est normalement * limité par le serveur en fonction de la taille en octets afin d'empêcher un type d'attaque DoS (notez que cela signifie que l'échappement de caractères peut augmenter la taille en octets du corps). Le paramètre de serveur le plus courant est de 10 Mo, bien que tous les serveurs populaires permettent d'augmenter ou de diminuer ce paramètre via un fichier ou un panneau de paramètres.

* Certaines exceptions existent avec les anciens téléphones portables ou autres navigateurs de petits appareils - dans ces cas, il s'agit plus d'une fonction d'espace de mémoire réservée à cet effet sur l'appareil que de toute autre chose.

David
la source
2
Dites quelque chose sur les limites du navigateur, compte tenucurl
Yugal Jindle
12
Je sais que je suis un peu en retard ici, mais des réponses comme celles-ci sont la raison pour laquelle j'aime StackOverflow. Au-delà de ce qui est requis et en fournissant de précieuses informations de base.
Dormouse
14

Vous pouvez publier une grande quantité de données en définissant la variable php.ini: la max_input_vars taille par défaut de cette variable est 1000, mais si vous souhaitez envoyer une grande quantité de données, vous devez augmenter la taille en conséquence. Si vous ne pouvez pas définir la taille depuis ini_set, vous devez le faire via htaccessou en modifiant directement le fichier php.ini.

max_input_vars  2500
memory_limit    256M
Nilesh Chourasia
la source
5

Comme David l'a souligné, j'irais avec KB dans la plupart des cas.

php_value post_max_size 2KB

Remarque: mon formulaire est simple, juste quelques zones de texte, pas un texte long.

ChrisDeDavidMindflowAU
la source
2

Par défaut, la demande de publication a une taille maximale de 8 Mo. Mais vous pouvez le modifier selon vos besoins. La modification peut être effectuée en ouvrant le fichier php.ini (paramètre de configuration php).

Trouver

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

remplacez 8 selon vos besoins.

Muhammad Ashfaq
la source
1

C'est au serveur http de décider s'il y a une limite. Le produit sur lequel je travaille permet à l'administrateur de configurer la limite.

ChrisH
la source
De plus, dans le fichier PNP.INI, il y a un paramètre: max_input_vars qui dans ma version de PHP: 5.4.16 par défaut à 1000. D'après le manuel: "Combien de variables d'entrée peuvent être acceptées (la limite est appliquée à $ _GET, $ _POST et $ _COOKIE superglobal séparément) "Réf.: [ Php.net/manual/en/info.configuration.php#ini.max-input-vars diplomatique 1] [1]: php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikolay Ivanov
1

L'une des meilleures solutions pour cela, vous n'utilisez pas plusieurs ou plus de 1 000 champs de saisie. Vous pouvez concaténer plusieurs entrées avec n'importe quel caractère spécial, par exemple. @.

Regarde ça:

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

En utilisant n'importe quel script (JavaScript ou 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

Avec cela, vous contournerez le max_input_varsproblème. Si vous augmentez max_input_varsle nombre de fichiers php.ini, cela nuit au serveur car il utilise plus de mémoire cache du serveur, ce qui peut parfois provoquer une panne du serveur.

harpej
la source
1
Je ne vois pas comment la concaténation de variables économise de la mémoire. Chaque caractère ASCII utilise 1 octet de mémoire. Une chaîne (techniquement un tableau de caractères si je ne me trompe pas) utilise n * 1 octets avec n comme longueur de chaîne. Pourquoi l'ajout d'un autre caractère réduirait-il la mémoire utilisée? Dans ce calcul, vous ajouteriez un autre octet pour chaque '@' que vous ajoutez à la chaîne. Bien sûr, vous réduisez le nombre de variables utilisées, mais vous payez ce «gain» avec un travail supplémentaire en les répartissant à nouveau.
DBX12
2
@ DBX12 Bien que vous n'économisiez pas de mémoire avec cette astuce, vous pouvez contourner l' max_input_varsoption dans le php.iniavec ceci. Pas exactement, ce qui a été demandé, mais toujours utile.
RicoBrassers
La limite de taille dépassée dépend de deux facteurs: premièrement, la taille de la chaîne de clé / valeur individuelle, c'est-à-dire le nombre de caractères côté clé et / ou valeur. deuxièmement, la quantité de paires clé / valeur, même si chaque paire a une petite quantité de caractères. Globalement, les deux facteurs ci-dessus se retrouvent avec une limite de taille supérieure au problème. Donc, pour moi, cette réponse est correcte et liée à la question et met en évidence un côté d'un problème.
Elnur Shabanov
0

Pour les développeurs qui ne peuvent pas modifier la configuration php en raison de l'hébergement Web. (Mes paramètres 256 Mo de taille max, 1000 variables max)

J'ai eu le même problème que seulement 2 objets sur 5 Big Data (tableaux associatifs) avec des sous-structures ont été reçus côté serveur.

Je découvre que toute la sous-structure est "aplatie" dans la demande de publication. Ainsi, un objet devient des centaines de variables littérales. Au final, au lieu de 5 variables Object, il s'agit en réalité d'envoyer des dizaines de centaines de variables élémentaires.

La solution dans ce cas est de sérialiser chacune des sous-structures en String. Il est ensuite reçu sur le serveur sous forme de 5 variables de chaîne. Exemple: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Mira Nedved
la source