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