Comment résoudre l'erreur PHP Fatal error: Allowed memory size of XX bytes exhausted ?

Le langage PHP est utilisé en installant le programme du même nom sur votre machine. Il existe le plus souvent sous la forme d'un module lié à un serveur web (par exemple Apache ou NGINX). Afin de ne pas saturer votre machine, le programme est configuré pour ne pas dépasser une quantité définie de mémoire. C'est le dépassement de cette quantité par un script qui provoque l'affichage du message d'erreur "Allowed memory size of XX bytes exhausted" et empêche son exécution.

Si cette erreur se produit sur votre ordinateur ou votre serveur, il faut d'abord vérifier la quantité de mémoire allouée à PHP. La configuration de PHP est stockée dans un fichier appelé "php.ini". Vous pouvez obtenir cette valeur en utilisant directement une fonction PHP dédiée, la fonction "ini_get()". Elle prend en argument le nom du paramètre dont on recherche la valeur, ici "memory_limit". Vous n'avez pas besoin de créer un script PHP, la commande php permet d'exécuter directement du code grâce à l'option "-r".

php -r "echo ini_get('memory_limit').PHP_EOL,"

Si vous pouvez augmenter cette limite, alors il vous suffit de vous rendre dans le fichier "php.ini" et de modifier la valeur correspondante à la taille souhaitée. La commande PHP possède une option qui va directement vous donner le chemin où se situe votre fichier de configuration.

php --ini
//Affiche par exemple "/etc/php5/cli/php.ini" ou "C:\php\php.ini"

Vous pouvez saisir la taille que vous souhaitez ou la valeur "-1" pour enlever cette limite. Vous devez être cependant prudent, car sans limites, votre machine pourrait planter si votre script consomme trop de mémoire.

Si vous n'avez besoin de dépasser cette mémoire que pour un script, il est possible d'indiquer en ligne de commande la taille de mémoire autorisée. On peut faire cette modification avec l'option "-d" qui permet d'indiquer un paramètre de configuration spécifique.

php -d memory_limit=-1 mon_script.php

Si vous utilisez l'outil Composer, certaines installations de librairies peuvent demander énormément de mémoire. Pour effectuer cette tâche particulière et ponctuelle, il existe un paramètre qui configure la mémoire utilisée par Composer, "COMPOSER_MEMORY_LIMIT". En le définissant à -1, on retire la limite de mémoire.

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require librairie_a_installer