Augmenter la limite de mémoire PHP : quand et comment ?
Le message Allowed memory size of … bytes exhausted signifie qu'un seul processus PHP a demandé plus de mémoire que la limite ne l'autorise. Vous augmentez cette limite dans le panneau de contrôle de votre hébergement, site par site ; pour WordPress, une ligne dans wp-config.php peut s'y ajouter. Regardez toutefois d'abord quel fichier figure dans le message d'erreur. Si l'erreur apparaît soudainement, il y a le plus souvent un plugin ou une importation derrière, et augmenter la limite ne fait que masquer le problème.
Ce que dit le message d'erreur
En entier : Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes), suivi d'un nom de fichier et d'un numéro de ligne.
- Le premier nombre est la limite actuelle en octets. 134217728 octets correspondent à 128 Mo.
- Le second nombre est ce que PHP voulait encore obtenir à cet instant. Il ne dit rien de la consommation totale.
- Le fichier et la ligne montrent où la mémoire s'est épuisée.
Sur un site en ligne, le visiteur ne voit généralement qu'une page blanche, un code d'erreur 500 ou, avec WordPress, le message signalant une erreur critique. Le véritable message se trouve alors dans le journal des erreurs. Sur ces codes d'état, lisez ce que signifient les codes d'erreur 403, 404 et 500.
Quand le problème se pose
Avec les constructeurs de pages gourmands, les grosses importations, les boutiques en ligne comptant beaucoup de produits et le traitement de grandes photos. Rarement avec un site d'entreprise ordinaire.
Où régler la limite
- Dans le panneau de contrôle. Chez WWW4, vous réglez la limite de mémoire PHP par site dans le panneau de contrôle, que vous ouvrez depuis le portail client. La valeur maximale possible dépend de votre formule. C'est la voie la plus fiable.
- Dans wp-config.php, pour WordPress. Ajoutez cette ligne au-dessus de celle qui vous demande d'arrêter les modifications : define('WP_MEMORY_LIMIT', '256M'); De lui-même, WordPress ne demande que 40 Mo pour la partie publique, 64 Mo pour un multisite, et 256 Mo dans l'administration. Si la limite du serveur est déjà plus élevée, cette ligne ne change rien. Si l'hébergement n'autorise pas de valeur plus élevée, non plus.
- Dans un fichier .user.ini. Sur un hébergement qui le permet, placez à la racine du site un fichier .user.ini contenant la ligne memory_limit = 256M. Par défaut, PHP ne relit ce fichier que toutes les cinq minutes. Sur un hébergement mutualisé, vous ne pouvez pas modifier vous-même le php.ini central du serveur.
Une ligne avec php_value dans le fichier .htaccess ne fonctionne que lorsque PHP tourne comme module d'Apache. Sinon, tout le site renvoie aussitôt une erreur 500.
Vérifier que la nouvelle valeur s'applique
Dans WordPress, ouvrez dans l'administration l'outil Santé du site, onglet Informations, section Serveur : vous y trouvez la limite de mémoire PHP réellement en vigueur.
Pourquoi augmenter n'est pas toujours la solution
Un site qui a soudain besoin de beaucoup plus de mémoire a le plus souvent un problème plutôt qu'un manque : un plugin qui charge tout en même temps, une importation qui ne travaille pas par lots, une fonction qui s'appelle elle-même sans fin. Dans ce dernier cas, n'importe quelle limite finit par être atteinte, aussi haute soit-elle. Augmenter masque le problème.
La limite vaut en outre par processus PHP, et chaque visiteur qui demande une page au même moment lance son propre processus.
Comment trouver la cause
- Lisez le chemin dans le message d'erreur. S'il contient wp-content/plugins suivi d'un nom de dossier, c'est dans ce plugin que la mémoire s'est épuisée. C'est souvent le coupable, mais pas toujours : un autre plugin peut avoir rempli la mémoire.
- Consultez le journal des erreurs dans le panneau de contrôle. Dans WordPress, réglez en plus dans wp-config.php WP_DEBUG et WP_DEBUG_LOG sur true et WP_DEBUG_DISPLAY sur false. Les erreurs s'écrivent alors dans debug.log, dans le dossier wp-content. Désactivez cela une fois la recherche terminée.
- Vérifiez ce qui a changé. Une mise à jour, un nouveau plugin, une grosse importation, un nouveau thème. Testez désormais vos mises à jour d'abord ; voir faire les mises à jour de WordPress en sécurité.
- Désactivez les plugins un par un jusqu'à ce que l'erreur disparaisse. Si vous n'avez plus accès à l'administration, renommez via FTP ou le gestionnaire de fichiers le dossier du plugin suspect.
- Mesurez la consommation. Le plugin Query Monitor indique la mémoire utilisée page par page.
- Réduisez la tâche. Importez en plus petits lots.
La limite de votre formule
La limite de mémoire maximale dépend de votre formule d'hébergement. La plus petite formule est prévue pour un site d'entreprise ou un blog ; une boutique en ligne ou un site avec un constructeur de pages gourmand demande une formule plus grande. Les formules figurent sur la page tarifs d'hébergement. Si vous y atteignez aussi régulièrement le maximum, votre propre serveur est l'étape suivante : lisez ce qu'est un VPS et quand y passer.
Questions fréquentes
J'ai augmenté la limite, mais l'erreur persiste. Que faire ?
Regardez le premier nombre dans le message d'erreur. S'il n'a pas changé, votre réglage n'est pas appliqué : le fichier se trouve dans le mauvais dossier ou votre formule n'autorise pas de valeur plus élevée. Si le nombre a bien augmenté et que la mémoire s'épuise malgré tout, vous cherchez une fuite et non un manque.
De combien de mémoire PHP WordPress a-t-il besoin ?
WordPress lui-même en demande peu. Les plugins et le thème déterminent la consommation ; mesurez donc votre propre site plutôt que de vous fier à une règle générale.
La limite de mémoire est-elle la même chose que la taille maximale de téléversement ?
Non. Les téléversements dépendent de upload_max_filesize et de post_max_size. Un téléversement qui échoue ne se résout pas avec plus de mémoire.
Ça ne marche pas ?
Transmettez-nous via contact le nom de domaine, le message d'erreur complet et l'heure de l'erreur. Nous regardons avec vous dans le journal du serveur.
Cela se passe autrement que décrit ci-dessus, ou vous n'y arrivez pas ? Contactez-nous avec votre nom de domaine ou votre numéro de client sous la main, et nous regardons avec vous.
Contacter le support