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.
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.
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.
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
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.
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.
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
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.)