Page d'accueil » Comment » Comment résoudre PHP Erreur fatale Taille de mémoire autorisée de 8388608 octets épuisés

    Comment résoudre PHP Erreur fatale Taille de mémoire autorisée de 8388608 octets épuisés

    Une des erreurs les plus courantes et frustrantes rencontrées par les codeurs PHP est la suivante: «Erreur fatale: taille mémoire autorisée de 8388608 octets épuisés…» suivie de quelque chose du genre «(tentative d'allocation d'octets XXXX) dans /home/www/file.module en ligne 12. ”Cette erreur PHP fatale survient car, par défaut, PHP a une limite d'utilisation de la mémoire de 8 Mo pour tout script donné. En fait, c'est une bonne chose, car vous ne voulez pas qu'un script PHP malhonnête arrête votre serveur en monopolisant toute la mémoire. Mais parfois, vous aurez un script PHP qui dépasse normalement la limite de 8 Mo (dire, pour importer ou télécharger). Pour contourner le message d'erreur «Erreur irrécupérable: taille de mémoire autorisée de 8388608 octets épuisés…», insérez simplement cette ligne de code dans votre script en haut:

    ini_set (“memory_limit”, ”16M“);

    Cela définira votre limite de mémoire à 16 Mo au lieu de 8 Mo. Vous pouvez et devez manipuler ce nombre afin qu'il soit aussi faible que possible sans répéter ce message d'erreur. Cela ne modifiera que la limite de mémoire pour ce fichier PHP particulier.

    Alternativement, vous pouvez modifier votre fichier php.ini pour augmenter la limite de mémoire. Cela affectera tous les scripts sur votre serveur. Ouvrez simplement php.ini et trouvez la ligne qui lit “memory_limit” et modifiez-la:

    memory_limit = 16M

    J'ai remarqué dans mon propre fichier PHP.ini que ma valeur par défaut est bien supérieure à 128M. Donc, si je recevais un jour ce message d'erreur, il se lirait ainsi: «Erreur fatale: taille mémoire autorisée de 134217728 octets épuisés…» et, de toute évidence, un problème beaucoup plus important. Mais la solution de contournement est la même que «Erreur fatale: taille de mémoire autorisée de 8388608 octets épuisés…» ou «Erreur fatale: taille de mémoire autorisée de 16777216 octets épuisés…» ou peu importe. Apparemment, la valeur par défaut memory_limit est passée de 8 à 16 millions de PHP 5.2.0 et est maintenant de 128M pour PHP 5.3.0, ce qui expliquerait pourquoi vous ne pouvez pas recevoir ce message d'erreur du tout..

    Vous pouvez également désactiver la limite de mémoire en définissant memory_limit sur -1 dans PHP.ini..

    memory_limit = -1

    Ce n'est généralement pas une bonne idée, cependant, pour des raisons évidentes.

    Remarque: vous pouvez également utiliser la ligne memory_limit dans votre page .htaccess..

    Rappelez-vous qu’il ne s’agit que d’une solution de contournement. Vraiment, votre script PHP devrait ne pas dépasser 8 Mo, sauf si vous téléchargez des fichiers ou effectuez autre chose qui nécessite manifestement beaucoup d’utilisation de la mémoire. Ce que vous devriez vraiment faire, c'est essayer de comprendre pourquoi votre script utilise autant de mémoire et d'essayer de le réparer. Une façon de déterminer la quantité de mémoire utilisée par votre script PHP consiste à utiliser la fonction PHP memory_get_usage (). Faites-le simplement écho à n'importe quel moment de votre script pour savoir où votre utilisation de la mémoire est en train d'augmenter:

    echo memory_get_usage ();

    Si vous obtenez ce message d'erreur dans Drupal ou Joomla, le coupable probable est un nouveau module ou package. Par exemple, dans Drupal, la page admin / modules se charge chaque module dans votre installation de Drupal, qui peut devenir poilu si un module personnalisé est bogué, corrompu ou piraté. Essayez de désactiver les modules un par un pour identifier le problème. De plus, certains hébergeurs ignoreront vos tentatives de modification des limites de mémoire de votre code PHP. Vous devrez peut-être contacter l'assistance de votre hébergeur pour vous aider. J'ai trouvé parfois que je devais éditer le fichier php.ini et parfois mettre le code dans le fichier .htaccess. Quoi qu'il en soit, espérons que cette information vous suffira!