IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestion des erreurs/exceptions pour GD (en POO) [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut Gestion des erreurs/exceptions pour GD (en POO)
    Salut à tous

    L'idée que j'ai me semble impossible voir pas affaire, mais je pose quand même la question.

    Concernant la gestions des erreurs et exception, elle est pour le moment conçues pour des pages HTML, et ça fonctionne plutôt bien.

    Le problème, c'est d'avoir un retour d'erreur, ne serait-ce simpliste lorsqu'il s'agit d'images dynamique avec GD.
    Le problème est le même d'ailleurs pour les documents PDF (voir tout documents autre que du html).

    J'ai une classe Runfw_Exception qui est dérivée de Exception afin de personnaliser cette gestion des errreurs/exceptions.
    Puis coté de mon petit FrameWork maison, au niveau du core (du moteur) ce code (je simplifie) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // classe Runfw (le core)
     
    public function initConfigErrors() {
        set_exception_handler(array('Runfw', 'exceptionHandler'));
        set_error_handler(array('Runfw', 'errorHandler'), E_ALL | E_STRICT);
    }
     
    public static function errorHandler($code, $error, $file = NULL, $line = NULL, $trace = NULL) {
     
            if ($code) {
                throw new ErrorException($error, $code, 0, $file, $line);
            }
            // Do not execute the PHP error handler
            return TRUE;
    }
     
    public static function exceptionHandler(Exception $e) {
        $class = get_class($e);
        Runfw_Exception::setException($e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace());
        Runfw_Exception::writeErreur();
        if (IS_DEBUG_EXCEPTION === TRUE) {
            if (is_callable(array($class, 'afficherErreur'))) {
                $class::afficherErreur();
            }
            else {
                Runfw_Exception::afficherErreur();
            }
        }
        return TRUE;
    }
    Donc toutes Exception sera traitée par la méthode Runfwv::exceptionHandler().
    Puis toutes erreurs de Php sera gérée par la méthode Runfw::errorHandler(), qui elle même la renvoie vers un Objet ErrorException, donc devient une exception, qui du coup sera traitée par Runfw::exceptionHandler().

    Au niveau de ma classe GdImage (qui une sorte de matrice), je ne vois pas d'autres solution que, qu'en cas d'erreur (ou exception) de générer une image GD afin d'afficher l'erreur, donc en PNG.


    Du coup, j'ai créé une classe Runfw_Gd_Exception, et dans cette classe une méthode commune à Runfw_Exception : Runfw_Gd_Exception::afficherErreur().
    C'est dans cette méthode ou je génère un PNG contenant le message d'erreur.


    Le problème, sans pour autant que ça le soit vraiment car j'ai une solution, je gère les erreur comme ceci :
    (dans un code quelconque)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    try {
        // Une erreur
        $truc = $existe_pas;
        // Ou une Exception
        // throw new Exception('quelque chose qui ne va pas.', E_USER_NOTICE);
        //... etc ...
    }
    catch (Runfw_Gd_Exception $e) {
        //Runfw::exceptionHandler($e);
        throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
        exit();
    }
    catch (ErrorException $e) {
        //Runfw::exceptionHandler($e);
        throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
        exit();
    }
    catch (Exception $e) {
        //Runfw::exceptionHandler($e);
        throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
        exit();
    }
    En faite, habituellement, je fais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
        $truc = $existe_pas;
    }
    catch (Exception $e) {
        Runfw::exceptionHandler($e);
    }
    Et c'est là ma question. (ouf )
    J'aurais aimé utilisé ce même code habituel pour catcher/attraper les erreurs, soit Runfw::exceptionHandler($e);
    et non : throw new Runfw_Gd_Exception(... etc ...)
    En somme, de gérer le cas Html/Gd/Pdf au niveau de Runfw::exceptionHandler(), donc de faire quelque part une alternative pour appeler la méthode afficherErreur selon le type de document.


    Ceci me semble impossible car en cas d'erreur ça devient une Exception, et pas une Runfw_GD_Exception. Je perds l'info finalement.
    Mais est ce possible ?
    Ce n'est pas à faire peut être, c'est farfelu, pas propre, etc ... ?

    Si vous avez une idée, sans tomber dans de grandes complexités, je suis preneur.

    (désolé pour la longueur, je ne vois pas comment faire plus court).

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Mon problème n'a pas l'air de passionner les foules ... c'est la misère.


    Bon, je mets résolu quand même car je me suis résolu à utiliser throw new Runfw_Gd_Exception(), tant pis.
    Ca fonctionne plutôt bien comme ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/12/2011, 12h39
  2. Gestion des erreurs pour runtime
    Par cbleas dans le forum Runtime
    Réponses: 1
    Dernier message: 09/12/2006, 14h18
  3. Réponses: 6
    Dernier message: 09/06/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo