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

Bibliothèques et frameworks PHP Discussion :

[JPGraph] les images des graphiques ne s'affichent pas "Catchable fatal error"


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [JPGraph] les images des graphiques ne s'affichent pas "Catchable fatal error"
    Bonjour,

    Je dois porter une une application web en PHP et une BDD MySQL, ces dernières sont anciennes l'appli est écrite en PHP 4.2 et la base est sous phpMyadmin 2.7 et MySQL 5.0.18. JPGraph 2.2 le tout fonctionnant sous une vieille VM en Suse
    J'ai donc une nouvelle VM Debian 10 Apache 2.4.38, le code de l'application étant en PHP 4.2 donc trop compliqué à passer en PHP 7.2, j'ai installé PHP 5.6,le serveur BDD est un MariaDB 10.3.27 et phpMyadmin un 4.9.7. JPgraph 4.3.4

    Voilà pour les présentations du système, alors ma nouvelle BDD est parfaitement fonctionnelle j'ai pu y importer les différentes tables de l'ancienne BDD.

    L'application en question, permet de collecter des données issues de météos issues différents capteurs situés sur différents sites en France, ses données sont ensuite mises sous formes de graphiques à l'aide de la bibliothèque JPGraph.
    J'ai mis à jour le code de l'application pour qu'il fonctionne en PHP 5.6, l'application fonctionne donc correctement, j'ai accès à ma BDD depuis l'application et je peux la mettre à jour sans problème. Tout fonctionne comme l'ancienne version sauf les graphiques qui ne s'affichent pas, ni sur la production ni sur la version de développement.
    Quand je fais un clic droit afficher l'image dans mon navigateur j'ai l'erreur suivante : Catchable fatal error: Argument 1 passed to JpGraphException::defaultHandler() must be an instance of Throwable, instance of JpGraphExceptionL given in /var/www/html/ciel/includes/jpgraph-4.3.4/src/jpgraph_errhandler.inc.php on line 158
    qui renvoie donc vers un fichier de la bibliothèque JPGraph, auquel je n'ai pas touché. voici la ligne de code en question (en gras dans le code ci-dessous) :

    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
    32
    33
    34
    35
    36
    37
    38
    class JpGraphException extends Exception {
        // Redefine the exception so message isn't optional
        public function __construct($message, $code = 0) {
            // make sure everything is assigned properly
            parent::__construct($message, $code);
        }
        // custom string representation of object
        public function _toString() {
            return __CLASS__ . ": [{$this->code}]: {$this->message} at " . basename($this->getFile()) . ":" . $this->getLine() . "\n" . $this->getTraceAsString() . "\n";
        }
        // custom representation of error as an image
        public function Stroke() {
        	if( JpGraphError::GetImageFlag() ) {
            	$errobj = new JpGraphErrObjectImg();
            	$errobj->SetTitle(JpGraphError::GetTitle());
        	}
        	else {    		
        		$errobj = new JpGraphErrObject();
            	$errobj->SetTitle(JpGraphError::GetTitle());    		
        		$errobj->SetStrokeDest(JpGraphError::GetLogFile());
        	}
            $errobj->Raise($this->getMessage());
        }
       static public function defaultHandler(Throwable $exception) {
            global $__jpg_OldHandler;
            if( $exception instanceof JpGraphException ) {
                $exception->Stroke();
            }
            else {
                // Restore old handler
                if( $__jpg_OldHandler !== NULL ) {
                    set_exception_handler($__jpg_OldHandler);
                }
                throw $exception;
            }
        }
    }
    Après différentes recherches, cette erreur n'est pas liée au code de JPGraph en lui même mais plutôt au code de l'application. Sauf que je ne sais pas exactement où chercher.
    Si quelqu'un a une petite idée pour me venir en aide je vous en suis gradement reconnaissant. N'hésitez pas à demander que je vous montre le code PHP ou même le code de la page ouverte dans le navigateur.

    En vous remerciant par avance pour votre aide.


    Vincent

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 401
    Points : 15 766
    Points
    15 766
    Par défaut
    cherchez l'appel de JpGraphException::defaultHandler dans le code et montrez le nous.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour mathieu,

    Merci pour votre retour.

    Les seuls références que j'ai pu trouver ne se trouvent pas des mes fichiers de code, mais dans ceux de la bibliothèque JPGraph, en l’occurrence le même fichier que celui indiqué dans l'erreur (JPGRAPH_ERRHANDLER.PHP). Ce sont des fichiers auxquels je n'ai pas touché.
    Voici le code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    class JpGraphError {
        private static $__iImgFlg = true;
        private static $__iLogFile = '';
        private static $__iTitle = 'JpGraph Error: ';
        public static function Raise($aMsg,$aHalt=true){
            throw new JpGraphException($aMsg);
        }
        public static function SetErrLocale($aLoc) {
            GLOBAL $__jpg_err_locale ;
            $__jpg_err_locale = $aLoc;
        }
        public static function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {
            throw new JpGraphExceptionL($errnbr,$a1,$a2,$a3,$a4,$a5);
        }
        public static function SetImageFlag($aFlg=true) {
        	self::$__iImgFlg = $aFlg;
        }
        public static function GetImageFlag() {
        	return self::$__iImgFlg;
        }
        public static function SetLogFile($aFile) {
        	self::$__iLogFile = $aFile;
        }
        public static function GetLogFile() {
        	return self::$__iLogFile;
        }
        public static function SetTitle($aTitle) {
        	self::$__iTitle = $aTitle;
        }
        public static function GetTitle() {
        	return self::$__iTitle;
        }    
    }
     
    class JpGraphException extends Exception {
        // Redefine the exception so message isn't optional
        public function __construct($message, $code = 0) {
            // make sure everything is assigned properly
            parent::__construct($message, $code);
        }
        // custom string representation of object
        public function _toString() {
            return __CLASS__ . ": [{$this->code}]: {$this->message} at " . basename($this->getFile()) . ":" . $this->getLine() . "\n" . $this->getTraceAsString() . "\n";
        }
        // custom representation of error as an image
        public function Stroke() {
        	if( JpGraphError::GetImageFlag() ) {
            	$errobj = new JpGraphErrObjectImg();
            	$errobj->SetTitle(JpGraphError::GetTitle());
        	}
        	else {    		
        		$errobj = new JpGraphErrObject();
            	$errobj->SetTitle(JpGraphError::GetTitle());    		
        		$errobj->SetStrokeDest(JpGraphError::GetLogFile());
        	}
            $errobj->Raise($this->getMessage());
        }
    Cette partie de code se situe juste au dessus de la partie évoquée dans mon premier message.

    Sachant que si j'utilise l'ancienne bibliothèque JPgraph 2.2 le problème est le même mais l'erreur est la suivante :
    Deprecated: Function split() is deprecated in /var/www/html/ciel/includes/jpgraph-2.2/src/jpgraph.php on line 186

    Deprecated: Function split() is deprecated in /var/www/html/ciel/includes/jpgraph-2.2/src/jpgraph.php on line 187
    JpGraph Error General PHP error : At jpgraph.php:5763 : Function split() is deprecated

    D'où ma décision de passer sur une version plus récente de JPGraph.

    Si jamais je peux vous faire suivre les parties de mon code concernant les différents graphiques.

    Merci encore

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 401
    Points : 15 766
    Points
    15 766
    Par défaut
    sur le site de la bibliothèque, il y a indiqué que ça devrait fonctionner avec PHP 5 mais d'après le code, ça ne peux pas.
    essayez de remplacer "Throwable $exception" par "Exception $exception" dans le fichier jpgraph_errhandler.inc.php pour voir si ce bricolage peut corriger le gestionnaire d'erreur.

Discussions similaires

  1. [WB20] Les images des boutons ne s'affichent pas.
    Par Anir.Ayyaw dans le forum WebDev
    Réponses: 2
    Dernier message: 14/05/2015, 11h10
  2. [JpGraph] les résultats des statistiques ne s'affichent pas
    Par Amelie MOREAU dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 07/07/2014, 14h12
  3. Charger les images des diapos et les afficher
    Par Ciloe dans le forum jQuery
    Réponses: 0
    Dernier message: 22/02/2012, 23h22
  4. [1.x] les images du layout.php s'affiche pas
    Par sou1987 dans le forum Symfony
    Réponses: 1
    Dernier message: 21/02/2010, 17h27
  5. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 11h03

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