Encapsuler tout une page dans un try catch

Eléphant du PHP | 91 Messages

16 janv. 2012, 12:16

Bonjour,

J'ai une page sur un site que je soupçonne de parfois planter dans certains cas. Seulement je n'ai aucune idée pour le moment de comment reproduire le bug ni de quand il se produit (ni même si c'est bien cette page qui pose pb).
De plus, c'est une page assez critique, et j'aimerais être averti par mail chaque fois que son chargement se fait de manière incomplete, le code de cette page se finit par une redirection, et j'aimerais être sûr à 100% que cette redirection est bien executé dans tout les cas.

Puis-je encapsuler alors tout le code de cette page de cette manière:

Code : Tout sélectionner

try { /*contient tout le code de cette page, redirection comprise */ } catch (Exception $e) { envoi_mail_erreur($e->getMessage()); }
?

Merci à vous!

ViPHP
xTG
ViPHP | 7331 Messages

16 janv. 2012, 12:40

Tu n'as pas accès au journal d'erreur de ton serveur ? Car ce que tu veux récupérer par email est contenu dedans.

Eléphant du PHP | 91 Messages

16 janv. 2012, 13:01

C'est ce que je me disais en écrivant ce post ... donc si je fais un cron job qui fait un grep dans les logs d'erreurs d'apache (ils sont situés où en général ?) et m'envoie le résultat par mail, j'obtiendrais la même chose qu'en faisant un try catch ?

Malheureusement, je ne peux pas vérifier tout de suite, je ne peux pas me connecter au serveur de là où je suis.

ViPHP
xTG
ViPHP | 7331 Messages

16 janv. 2012, 14:08

Ce ne sont pas les logs d'Apache mais de php.
Tu les trouveras normalement dans un fichier nommé error_log à la racine de ton domaine.

devlop78
Invité n'ayant pas de compte PHPfrance

20 janv. 2012, 04:05

PHP ne gère pas tout en exception (d'ailleurs presque rien avant l'objet), le try catch sera inadapté.

Je te conseille la section http://www.php.net/manual/fr/ref.errorfunc.php

Cette section te montre par exemple set_error_handler() qui te permet d'écrire toi-même ton gestionnaire d'aide, pour écrire dans un fichier dans un dossier de ton choix, et faire d'autres choses si tu veux. Cependant, le error handler ne s'execute pas sur des fatal error ou équivalent. Il existe alors une astuce, à utiliser avec modération :

http://php.net/manual/en/function.regis ... nction.php

Cette fonction sera executée quoiqu'il arrive (même un timeout je crois). Tu peux donc vérifier si une erreur a été lancée, et faire le traitement nécessaire. A savoir qu'une exception non rattrapée devient un fatal error et donc rentre dans ce cas-là.