Bonjour,

J'ai une erreur (Exception je pense) qui me vient de quelques part dans mon code => Mais je sais pas d'où? qui me donne :

Call to a member function getFruit() on a non-object in home/fruit.php on line 339

Je voudrais que, quand y a ce genre d'erreur, un mail soit envoyer à l'admin du site. Mais je sais pas comment l'attraper pour pouvoir envoyer un mail à l'admin.

Est ce que c'est faisable?

Merci et bonne journée.
nancyAlex a écrit :
Bonjour,

J'ai une erreur (Exception je pense) qui me vient de quelques part dans mon code => Mais je sais pas d'où? qui me donne :

Call to a member function getFruit() on a non-object in home/fruit.php on line 339

Je voudrais que, quand y a ce genre d'erreur, un mail soit envoyer à l'admin du site. Mais je sais pas comment l'attraper pour pouvoir envoyer un mail à l'admin.

Est ce que c'est faisable?

Merci et bonne journée.

Je ne sais pas si c'est faisable, mais le message est clair: regarder à la ligne 339 du fichier home/fruit.php
L'instruction doit être du genre $toto => getFruit(); et ce que dit ce message c'est que $toto n'est pas un objet.
En mettant à la ligne précédente une trace, type

    echo "<pre>toto=|";print_R($toto);echo "|</pre>\n";

Tu verras apparaître quelque chose comme "toto=||" signifiant que la variable $toto n'a pas été initialisée, ou autre chose.
Le plus souvent, il s'agit d'une faute de frappe, ta variable devrait s'appeler $titi ...
Merci pour ta réponse,

Oui, je trouve la solution à ce problème au fait. Mais je voudrais envoyer un mail à l'admin quand ce genre de message apparait.
Et c'est là que je sais comment l'attraper.
nancyAlex a écrit :
Merci pour ta réponse,

Oui, je trouve la solution à ce problème au fait. Mais je voudrais envoyer un mail à l'admin quand ce genre de message apparait.
Et c'est là que je sais comment l'attraper.

Comprends pas:
1) si c'est toi l'administrateur, tu ferais mieux de poser des points de trace que d'attendre d'avoir reçu un message, dont en plus je ne vois pas ce que tu pourras faire.
2) si ce n'est pas toi, je peux te dire qu'il est de bonne composition d'accepter de recevoir des messages au moindre bug! et par ailleurs que peut il en faire?
Je voudrais pouvoir régler le bug quand y en a. Au lieu d'attendre que c'est moi qui fait un tour sur le site, vois le bug et le corrige après, alors qu'un utilisateur l'a déjà vu y a longtemps.
Un fatal error se déclenche, soit l'admin suit en permanence le log soit il est au courant de rien et le fatal error reste là, à moins qu'un utilisateur l'avertit(ce qui est moins probable).
nancyAlex a écrit :
Je voudrais pouvoir régler le bug quand y en a. Au lieu d'attendre que c'est moi qui fait un tour sur le site, vois le bug et le corrige après, alors qu'un utilisateur l'a déjà vu y a longtemps.
Un fatal error se déclenche, soit l'admin suit en permanence le log soit il est au courant de rien et le fatal error reste là, à moins qu'un utilisateur l'avertit(ce qui est moins probable).

Ok je comprends que l'administrateur c'est toi.
Il y a dans PHP un mécanisme pour trapper les erreurs, mais je ne l'ai pas expérimenté. On doit pouvoir au moins noter l'erreur dans un log et lancer un watchdog qui regarde toutes les heures l'état du log et envoie un message d'alerte.
Les erreurs du genre accéder à une propriété non définie d'un objet ou accéder à un index non défini d'un tableau ne sont pas attrapables via try catch.

Tu peux toujours passer par set_error_handler
http://php.net/manual/fr/function.set-error-handler.php

Le mieux est de ne pas avoir ce genre d'erreurs dans ton code, c'est pas normal que tu essaies d'accéder à une propriété inexistante d'un objet, ça veut dire que tu ne teste pas correctement ton app si tu lève des erreurs comme ça.
Modifié par Freez (10 Feb 2015 - 21:16)
Bonjour,

Au fait l'erreur que j'ai donné en haut je l'ai déclenché expressement pour tester l'envoi de mail. Je vais voir du côté de set_error_handler ça a l'air intéressant.

Merci
Modifié par nancyAlex (11 Feb 2015 - 07:20)
nancyAlex a écrit :
Je vais voir du côté de set_error_handler ça a l'air intéressant.

Je confirme que quand je parlais de traitement des erreurs sus PHP c'est bien à set_error_handler que je pensais.
comme je le disais, je n'ai jamais eu à utiliser ce mécanisme. Tiens nous au curant de ton expérience
Bon courage
Ah au temps pour moi, je ne me rappelais plus que le try...catch ne choppait pas ce genre d'erreur.

Il faut donc bien utiliser le set_error_handler, mais effectivement le mieux serait que tu testes quand même tes objets avant utilisation (is_object suffira peut-être).

EDIT :
A la rigueur, tu transformes toutes les erreurs en exception, et là, tu pourras utiliser le try...catch :
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

Modifié par SolidSnake (11 Feb 2015 - 11:20)