Augmenter la mémoire PHP pour corriger « PHP Fatal error: Out of memory »
Erreur observée :
*PHP Fatal error: Out of memory (allocated 49545216) (tried to allocate 77824 bytes) in /home/xxxxx/public_html/xyz/admin.php(1758) on line 40*
Pourquoi cela arrive
PHP limite la mémoire utilisable par chaque processus PHP via la directive memory_limit. Lorsqu’un script dépasse cette limite, PHP déclenche une erreur fatale et le script s’arrête. Cela peut arriver après une augmentation du trafic, une tâche lourde (import, export, image processing), ou une fuite/gestion inefficace de la mémoire dans le code.
Important : redémarrer Apache (httpd) peut libérer de la mémoire et rétablir le service immédiatement. C’est un correctif ponctuel, pas une solution définitive.
4 méthodes pour augmenter la mémoire PHP
- Modifier php.ini
- Localisez le php.ini réellement lu par PHP. Créez un fichier
check.php
à la racine contenant :
- Ouvrez ce fichier dans un navigateur. Cherchez « Loaded Configuration File » pour connaître le chemin (souvent
/usr/local/lib/php.ini
). - Éditez php.ini et modifiez la directive
memory_limit
. Exemples :
memory_limit = 12M
memory_limit = 16M
memory_limit = 24M
Augmentez progressivement jusqu’à ce que l’erreur disparaisse.
- Augmenter depuis le script
Si vous n’avez pas accès à php.ini, ajoutez dans le script problématique (par exemple admin.php
) au début :
ini_set('memory_limit', '32M');
Cela s’applique au processus courant et n’affecte pas la configuration globale.
- Via .htaccess
Sur certains serveurs Apache+mod_php, ajoutez dans .htaccess
:
php_value memory_limit 32M
- Pour WordPress — wp-config.php
Dans un site WordPress, ajoutez ou modifiez :
define('WP_MEMORY_LIMIT', '32M');
Cela demande à WordPress d’augmenter la limite pour les processus PHP exécutant WordPress.
Note : certains hébergeurs restreignent la valeur maximale. Si rien ne change, contactez votre hébergeur.
Diagnostic : trouver le script responsable
Augmenter la mémoire résout l’urgence. Mais identifier et corriger le script évite la régression.
- Activez les logs d’erreur PHP et observez les messages :
error_log
etdisplay_errors
en environnement de test. - Insérez des traces :
error_log('Checkpoint X - memoria: '.memory_get_usage());
oumemory_get_peak_usage(true)
pour mesurer. - Profiling : utilisez Xdebug (profiling), ou un profiler tel que Tideways/Blackfire si disponible.
- Vérifiez les tâches cron, imports/export, plugins WordPress récents.
- Reproduisez en local avec les mêmes données pour debugging pas en production.
Approches alternatives et bonnes pratiques
- Optimiser le code : libérer les variables inutiles (
unset()
), éviter les boucles qui accumulent des objets, utiliser des générateurs pour traiter de grands jeux de données. - Pagination / streaming : traitez par lots (chunks) au lieu de charger tout en mémoire.
- Caching : évitez les recomputations lourdes.
- Mettre à jour PHP et extensions : les versions récentes sont souvent plus performantes en mémoire.
- Si possible, exécutez les tâches lourdes hors requête web (worker, queue, CLI) qui ont souvent une limite mémoire plus élevée.
Quand augmenter la limite échoue
- L’hébergeur impose un plafond global. Seul le support peut changer cela.
- Fuite mémoire dans une extension PHP ou une librairie native. Le symptôme persiste même après hausse.
- Consommation mémoire qui croît linéairement : signe d’une accumulation non contrôlée.
Mini-méthodologie (playbook rapide)
- Redémarrer Apache pour restaurer le service.
- Lire le log d’erreur PHP et noter le script et la ligne.
- Reproduire en local ou en staging.
- Mesurer l’utilisation mémoire (
memory_get_peak_usage
). - Augmenter temporairement
memory_limit
pour continuer l’accès. - Corriger le code ou déplacer la tâche vers un processus CLI/worker.
- Remettre la limite à une valeur raisonnable et surveiller.
Checklists par rôle
Administrateur système
- Vérifier php.ini et version de PHP.
- Adapter configuration du serveur (workers, prefork/pm settings).
- Contacter l’hébergeur si besoin.
Développeur
- Chercher fuites et objets lourds.
- Ajouter testes unitaires pour fonctions gourmandes en mémoire.
- Mettre en place profiling et monitoring.
Responsable produit
- Valider l’impact fonctionnel et prioriser correctifs.
- Planifier maintenance si nécessaire.
Exemples de snippets utiles
- Dans un script PHP :
ini_set('memory_limit', '128M');
error_log('Peak memory: '.memory_get_peak_usage(true));
- Dans
.htaccess
:
php_value memory_limit 64M
- Dans
wp-config.php
pour WordPress :
define('WP_MEMORY_LIMIT', '64M');
Sécurité et confidentialité
Ne publiez jamais un fichier phpinfo()
sur un site public. Il révèle des chemins et versions qui aident un attaquant. Supprimez check.php
après usage.
Résumé
Augmenter memory_limit
règle vite un blocage « Out of memory ». Mais c’est souvent un pansement. Diagnostiquez le script gourmand, optimisez le code ou exécutez la tâche en mode CLI/worker. Si vous êtes en hébergement mutualisé, le support peut imposer des limites — contactez-le.
1-ligne glossaire
- memory_limit : directive PHP qui fixe la mémoire maximale qu’un script peut utiliser.
- WP_MEMORY_LIMIT : constante WordPress pour demander une limite plus élevée.
- phpinfo() : fonction qui affiche la configuration PHP et l’emplacement du php.ini.
Image Courtesy: Clarkandransom
Matériaux similaires

Ajouter sites à la liste blanche Flash sur Windows RT

Photoshop CS5 sur Ubuntu 10.10 — guide

Télécharger films et séries Netflix hors ligne

Corriger l'erreur Firefox déjà en cours d'exécution

Tim Cook : apprendre le code vaut mieux que l'anglais
