PRATIQUE PHP 
Conserver une image JpGraph sous forme de fichier
 
"Je n'arrive pas à donner un nom au fichier image généré par JpGraph, afin de pouvoir en mettre plusieurs sur la même page. Quelle serait la solution ?" (22/12/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

JpGraph est une bibliothèque très complète, qui permet de créer des graphes aussi complexes que ceux générés par Excel, par exemple, en quelques lignes de code PHP, et des données statiques ou dynamiques (lire "Fonctionnement de JPGraph pour PHP5").

La bibliothèque dispose de nombreux types de graphe possibles, mais ses développeurs ont fait en sorte que chacune dispose des mêmes méthodes fondamentales, afin de ne pas se perdre, et même de pouvoir facilement changer le type de graphe en un autre sans devoir réécrire l'ensemble du code.

Tous disposent donc d'une méthode Stroke(), qui envoie l'image au navigateur. Effectivement, par défaut, cette image n'est pas nommée ni stockée, car les données sont supposées dynamiques - les données sont d'ailleurs envoyées avec leurs propres en-têtes HTTP. Donc, il est impossible de placer du code JpGraph directement dans une page XHTML, il faudra l'intégrer à une balise img.

Pour ceux qui souhaitent cependant conserver une trace de l'image produite, Stroke() prend simplement en argument le nom du fichier cible. Attention, le nom doit être spécifié avec son chemin serveur absolu : il ne peut être nommé relativement au script PHP. Donc par exemple on obtiendra le code suivant pour obtenir une image graph2007.png :

$g->Stroke("/usr/home/jdndev/jpgraph2/img/graph2007.png");

Par ailleurs, JpGraph ne laisse pas l'utilisateur seul dans cette situation : deux noms de fichier sont prédéfinis. Le premier, "auto", crée l'image dans le même dossier que son script PHP, avec le nom du script, suivit de l'extension.

$g->Stroke("auto");

Le second, _IMG_HANDLER, spécifie que l'image ne sera pas affichée dans le navigateur ni ne sera sauvegardée, mais que Stroke() renverra une ressource vers cette image, ressource qui pourra ensuite être manipulée, par exemple avec la bibliothèque GD ou l'extension de création de fichier PDF.

$fichier = $g->Stroke(_IMG_HANDLER);

Accessoirement, pour mettre plusieurs graphes sur une même page, il reste possible d'établir plusieurs fichiers PHP chacun appelé par sa balise img, ou même un seul fichier PHP agissant selon les arguments qui lui sont passés par l'URL...

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page