Comment traiter les erreurs fatales type "Allowed Memory" ?

opusdei
Invité n'ayant pas de compte PHPfrance

13 sept. 2011, 16:35

Bonjour,

Je cherche un moyen pour traiter les erreurs fatales de PHP, en particulier celles engendrées lors d'un traitement d'image. Il peut m'arriver d'avoir à gérer le type d'erreur suivant : "Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2304 bytes) in /home/site/www/upload.php on line 64"

Je souhaiterais qu'au lieu d'afficher l'erreur, je puisse faire un echo personnalisé ou une redirection par exemple.

Je souligne que ma question concerne bien le traitement des erreurs, et non l'allocation de mémoire dans php.ini.

Merci à tous !

Mammouth du PHP | 672 Messages

13 sept. 2011, 16:41

Bonjour.

Tu peux peut-être regarder la fonction set_error_handler().
Ou le sujet Collecter des messages d'erreur...

Eléphant du PHP | 121 Messages

13 sept. 2011, 17:23

Tu ne peux rien faire contre les erreurs fatales, si tu manques de mémoire essaie d'en demander d'avantage e.g. ini_set('memory_limit', '64M'), même si ce n'est pas ce que tu as demandé c'est la seule solution.

Maintenant, si tout ce que tu souhaite c'est être "informé" lorsque ces erreurs se produisent, utilise la fonction "register_shutdown_function()" pour ajouter une fonction de rappel à la procédure de fermeture de PHP, tu pourras alors vérifier si une erreur s'est produite et envoyer un e-mail par exemple : https://github.com/ICanBoogie/ICanBoogi ... ug.php#L62

Les erreurs fatales sont fatales, c'est comme ça.

opusdei
Invité n'ayant pas de compte PHPfrance

13 sept. 2011, 17:45

Merci pour votre aide, ça devrait le faire !

devlop78
Invité n'ayant pas de compte PHPfrance

20 sept. 2011, 17:06

Register_shutdown ne respecte pas le max_timeout, ce serait drole de voir comment il respecte la mémoire ... Car s'il est appelé à la fin d'un script qui déborde la mémoire, et que lui même essaie d'utiliser la mémoire (tout est mémoire, écrire dans un fichier nécessite de la mémoire), blang baf ...

Peut-être initialiser une variable au début du script de 10 Ko, et la libérer à l'appel de register_shutdown, pour pouvoir avoir assez de ressources (il y a des chances qu'avant un débordement de mémoire vers l'erreur, php effectue déjà un appel au GC).

Enfin, je dis ça, pour le coup je n'en sais strictement rien, mais ça vaudrait le coup de faire l'expérience.

Mammouth du PHP | 2278 Messages

24 sept. 2011, 20:41

La kalachnikov, ya que ça de vrai...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

devlop78
Invité n'ayant pas de compte PHPfrance

24 sept. 2011, 21:45

Si tu le dis. Mais quel rapport ?

Mammouth du PHP | 2278 Messages

25 sept. 2011, 14:15

Toutes les erreurs se traitent par leur élimination, quel que soit leur domaine, leur cause, leur raisons. Or le moyen le plus universel, le plus solide, le plus facile à entretenir est connu pour être la kalachnikov. Si ce n'est pas en rapport, je veux bien devenir pape...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

25 sept. 2011, 15:36

Avec une kalachnikov on transforme les problèmes en confettis.
Et les confettis c'est pas bon dans la machine...

devlop78
Invité n'ayant pas de compte PHPfrance

25 sept. 2011, 19:08

Faut arrêter la télé ... Cette arme n'est pas la meilleure, quelque soit le critère, elle est juste bonne, facile à construire donc peu chère, et mythique. Elle ne convient pas aussi à tous les domaines, comme la longue distance, ou comme l'informatique. Ca peut être bien de délirer au moins dans un sujet qui a un rapport ...