@
]
o
o
!
>
#

NOUS LES DEVS

L'erreur des 1000 champs

Une sauvegarde qui fait disparaitre des données

Niveau : débutant(e)
</> </> </>

1000 champs

Un client entre en contact avec l’agence pour un problème de données qui se suppriment d’elles-mêmes lors de la sauvegarde depuis le backend. J’ai plusieurs idées qui me traversent l’esprit mais la première chose que je décide de faire est de rajouter quelques informations et de sauvegarder la page afin de tenter de reproduire le problème.

Sur cette page, je constate 200 lignes de répéteur ACF qui contiennent chacune quatre champs. Après une analyse dans le DOM, je vois que j’approche fortement des 1000 champs. A partir de ce moment-là, j’ai eu une grosse suspicion sur une directive PHP qui limite le nombre de champs qu’un serveur web peut recevoir en une fois.

Error_log

En faisant une petite recherche dans l’error_log, je trouve instantanément le problème. J’ai un joli message « Input variables exceeded 1000 » et même une proposition pour résoudre le problème.

AH01071: Got error 'PHP message: PHP Warning:  Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0', referer: https://www.sitedetest.com/wp-admin/post.php?post=1234&action=edit

max_input_vars

Pour solutionner le problème, il faut augmenter la valeur de la directive max_input_vars dans PHP. La méthode la plus simple est de changer la valeur dans le fichier php.ini (voir plus bas).

Via Plesk

Dans Plesk c’est encore plus simple, l’outil nous offre une interface pour changer des directives sans passer par la console. Il suffit d’aller dans le domaine voulu et de cliquer sur PHP.

plesk-domaine-php

Puis en bas, dans la section « Additional directives », ajouter la directive.

max_input_vars

Voici le code si tu veux copier/coller pour ne pas faire d’erreur.

max_input_vars=3000

En ligne de commande

Dans Linux, tu peux taper la commande php –ini qui te permettra de localiser les différents chemins des fichiers de configuration.

php --ini

Tu pourras voir une liste de chemins qui ressemble un peu à ça.

Configuration File (php.ini) Path: /opt/plesk/php/8.2/etc
Loaded Configuration File:         /var/www/vhosts/nouslesdevs.com/etc/php.ini
Scan for additional .ini files in: /opt/plesk/php/8.2/etc/php.d

Dans mon cas de figure, c’est assez explicite et j’ouvre le fichier php.ini qui se situe dans le vhost de mon domaine. Je retrouve bien la valeur 3000 qui correspond à la valeur que j’ai modifiée via Plesk. Donc ici, tu peux soit ajouter la directive soit l’éditer et enregistrer le fichier.

...
max_input_time = 60
max_input_vars = 3000
memory_limit = 128M
...

Dans certains cas, il faut redémarrer Apache.

sudo service apache2 restart

Solution et amélioration

A partir de maintenant, le système permet donc l’envoi de 3000 champs. Ca devrait me laisser le temps de trouver une solution car, comme tu t’en doutes, ce n’est vraiment pas optimal, ni pour notre client ni pour le serveur.

Je pense que je vais opter pour un custom post type. La migration va être très simple, ça va apporter de la flexibilité et répondre parfaitement au besoin d’administration de contenu.

21/04/2025

Yann Vangampelaere - nouslesdevs -

NOUS LES DEVS

Vous aimez ce que je fais ? Vous voulez que j'en fasse plus ? dans le développement du blog.