web-dev-qa-db-fra.com

nouvelle limite dans php: 1000 champs par POST. Est-ce que quelqu'un sait si le nombre peut être influencé?

Dans les versions PHP plus récentes, le nombre de fichiers d'entrée par formule (POST) sera limité à 1000 (informations non vérifiées). Il semble que cette limite soit déjà installée dans certaines versions de 5.2. Cela cause beaucoup de problèmes dans notre boutique en ligne.

Est-ce que quelqu'un en sait plus à ce sujet et si cette limite pourrait être influencée par des paramètres ou Vars. Je viens de trouver max_input_vars, mais il semble que ce soit une nouvelle var complète de 5.4.RC4 Et je ne suis pas sûr, si cette var sera celle de la méthode POST.

50
Peter
max_input_vars

est une tentative pour PHP pour résoudre certains problèmes de sécurité et lorsqu'il est défini, il limite votre nombre d'entrées (donc, les champs dans vos formulaires).

max_input_nesting_level

Et oui - ils sont configurables. Modifiez simplement vos valeurs php.ini ou htaccess.

59
Slavic

Moi aussi, je suis tombé sur ce problème, travaillant sur une installation localisée de mon code, et Debian Sid a mis à niveau vers 5.4 RC4 PHP. Une forme de plus de 7000 lignes avec des cases à cocher (!) N'en a soudainement traité que 1001 dans les données $ _POST ... la tête se gratte pendant quelques heures.

Apportez la modification dans /etc/php5/Apache2/php.ini:

max_input_vars = 5000

enregistrez et redémarrez Apache, et tout va bien maintenant.

30
Onyx

Si vous ne pouvez pas/ne voulez pas augmenter la limite du serveur, voici une autre solution

<!-- 10000 checkboxes outside the FORM. You do not want to post this -->
<input class="cbox" type="checkbox" value="1"  id="id-1" checked name="id[]">
....
<input class="cbox" type="checkbox" value="10000"  id="id-10000" checked name="id[]">
<form method="POST" action="postpage.php">
    <input type="hidden" id="cboxes" name="cboxes" class="cboxes" value="" />
    <input type="submit" onclick="return clicked();">
</form>

puis en utilisant jquery

<script>
function clicked() {
    var cb = $('.cbox:checked').map(function() {return this.value;}).get().join(',');
    $('#cboxes').val(cb);
    return true;
}
</script>

En utilisant POST j'ai testé la publication de 10000 enregistrements.

Sur le serveur

$cboxes = $_POST['cboxes'];
$cbox_exp =(explode(',', $cboxes));
print_r(count($cbox_exp)); //gives me 10000
6
Ruben Benjamin

Je voulais juste résumer et souligner quelques points:

1) Les limitations peuvent être PHP comme mentionné ci-dessus.

2) Les limitations peuvent être le serveur Web également mentionné ci-dessus.

3) Suhosin les limitations ne s'appliquent que s'il est installé. Les paramètres sont modifiés dans php.ini

4) Méfiez-vous des limites de longueur d'URL du navigateur si vous essayez de soumettre autant de données dans l'URL

Redémarrez votre serveur Web après avoir modifié les paramètres du serveur.

3
Chris

Il est toujours bon de simplement filtrer certaines des données que vous soumettez - plutôt que de modifier cette limite dans PHP. Par exemple, si vous envoyez des informations via Ajax ou via un champ de formulaire, il vous suffit de stringifier le champ à l'origine du problème.

La limite est sur le "nombre" de champs et non sur la "longueur", si cela a du sens.

1
Ashesh

Apparemment, cela ressemble à un patch sur l'environnement Linux à l'origine de ce problème. Si votre serveur a ce correctif "suhosin", c'est probablement le problème. De plus, il n'est pas possible de remplacer cela lors de l'exécution, mais plutôt d'inclure dans votre php.ini

suhosin.post.max_array_depth 

suhosin.post.max_array_index_length 

suhosin.post.max_name_length 

suhosin.post.max_totalname_length 

suhosin.post.max_vars 

suhosin.post.max_value_length 
1
dots-do-matter

Ces changements ont tendance à être bien documentés. Êtes-vous sûr qu'il a été rétroporté vers 5.2? Où avez-vous lu cela? Il semble plus probable que vous atteigniez une autre limite telle que post_max_size ou Apache LimitRequestFields , ou même un PHP mod de sécurité comme - Suhosin .

(De plus, PHP 5.2 n'est plus supporté, donc je doute qu'il recevrait une telle mise à jour.)

0
Álvaro González