Zend framework et Jpgraph

Eléphanteau du PHP | 17 Messages

14 août 2010, 21:20

Salut tout le monde,
je veux créer des graphes (tq des camemberts..) dans mon application.Pour ce faire ,j'ai installé Jpgraph. Je vous montre ici le code que j'ai fait dans mon controlleur et dans la vue correspondante :
ServeurController/superviserAction:

Code : Tout sélectionner

<?php class Supervision1Controller extends Zend_Controller_Action { public function init() { $contextSwitch = $this->_helper->getHelper('contextSwitch'); $contextSwitch->addContext('png', array( 'suffix' => 'png', 'headers' => array('Content-Type' => 'image/png'), )); $contextSwitch->addActionContext('superviser','png'); $contextSwitch->initContext(); } public function indexAction() { } public function superviserAction() { header("Content-type:image/png ;charset=utf-8"); $this->_helper->viewRenderer->setNoRender(); $this->_helper->layout->disableLayout(); date_default_timezone_set('Australia/Sydney'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph.php'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph_pie.php'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph_pie3d.php'); $tab=array(); $sortie=shell_exec('df'); file_put_contents('sortie.txt',$sortie); $ligne=file('sortie.txt'); $taille=count($ligne)-1; $pos=strpos($ligne[0],'Use%'); for($i=1; $i<=$taille;$i++) { $str=substr($ligne[$i],$pos,3); if(strlen($str)<3) { $str=trim($str,'%'); } $str=trim($str); $tab[$i]=intval($str); } $graph=new PieGraph(500,300); $graph->title->Set('Taux d\'utilisation du disque dur'); $graph->img->SetMargin(40,140,20,40); $p1=new PiePlot3D(40,60,21,33); $graph->Add($p1); $graph->Stroke(); $image="APPLICATION_PATH .'controllers/Supervision1Controller.php'"; echo '<img src= "$image"/>'; } }
Mais quand je l'execute , j'obtiens l'erreur:
L'image "http://Jessica.stage/serveur/superviser" ne peut pas etre affichée car elle contient des erreurs.
Si quelqu'un a une idée sur la cause de cette erreur .je suis preneuse (ça fait 4 jours que je cherche mais sans aucun résultat!!)
merci d'avance.

ViPHP
ViPHP | 5462 Messages

14 août 2010, 21:26

c'est pas le controller qui faut affiché mais la vue...

ViPHP
xTG
ViPHP | 7331 Messages

14 août 2010, 21:27

Tu boucles indéfiniment sur ton image en fait avec ce code. ^^

Il te faut une fonction pour la générer (elle sera appelée dans la balise img) et une pour afficher la Vue qui contiendra la balise img.

ViPHP
ViPHP | 5462 Messages

14 août 2010, 21:33

Tu boucles indéfiniment sur ton image en fait avec ce code. ^^
qu'est ce qui boucle ?

ViPHP
xTG
ViPHP | 7331 Messages

14 août 2010, 21:39

$graph->Stroke();
Génère le rendu donc affiche l'image.
Et dans la même page nous avons un un echo avec la balise img pointant sur la même fonction, d'où retour au début du code.

Bien sûr c'était une façon de parler puisque le code n'est pas exécuté deux fois (heureusement que les machines sont pas toujours bêtes 8-| )

ViPHP
ViPHP | 5462 Messages

14 août 2010, 21:42

$graph->Stroke();
Génère le rendu donc affiche l'image.
Et dans la même page nous avons un un echo avec la balise img pointant sur la même fonction, d'où retour au début du code.

Bien sûr c'était une façon de parler puisque le code n'est pas exécuté deux fois (heureusement que les machines sont pas toujours bêtes 8-| )
appeler Supervision1Controller.php ca fera rien, encore moins en local

ViPHP
xTG
ViPHP | 7331 Messages

14 août 2010, 23:09

Au temps pour moi, je n'ai jamais utilisé ce framework. :)

ViPHP
ViPHP | 5462 Messages

14 août 2010, 23:28

Au temps pour moi, je n'ai jamais utilisé ce framework. :)
même sans avoir utilisé ce framework, lancer un fichier qui contient juste une classe ca fait rien :wink:

Eléphanteau du PHP | 17 Messages

15 août 2010, 00:13

Qu'est ce que vous voulez dire par il faut afficher la vue et non pas le controller?: J'ai déjà essayé de faire ça dans le fichier de vue superviser.png.phtml:

Code : Tout sélectionner

<xhtml> <head><meta http-equiv="Content-type" content="text/html; charset=utf-8" /></head> <body><img src="Supervision1Controller.php"/></body> </xhtml>
Qu'est ce que vous me proposez comme solution,j'ai vraimant essayé pleins de trucs mais en vain.
Merci à l'avance pour vos réponses

ViPHP
ViPHP | 5462 Messages

15 août 2010, 00:19

tu sais comment marche le Zend Framework ?

Eléphanteau du PHP | 17 Messages

15 août 2010, 02:42

:D ,je suis débutante ,je travaille sur mon premier projet en zend.Mais dans quel sens tu me pose cette question??
Selon ton Post précédent ,je peux te répondre que zend framework se base sur le principe de MVC ,çàd qu'il s'agit de séparer les models des vues et des controllers.et en se limitant à mon cas ,un controlleur qui s'appelle Supervision1 peut contenir plusieurs actions ,et pour chaque action il y a une vue correspondante!! Tu me conseilles donc d'afficher la vue et non pas le controller?? si oui ,est ce que tu peux me dire comment le faire proprement ? (car j'ai essayé de le faire avec plusieurs méthodes ,mais ça donne aucun résultat .J'ajoute qu'avec l'instruction $this->_helper->viewRenderer->setNoRender(); la vue est désactivée , n'est ce pas?)

ViPHP
ViPHP | 5462 Messages

15 août 2010, 16:24

tu sais avec quelle adresse afficher une vue ?

Eléphanteau du PHP | 17 Messages

15 août 2010, 18:20

J'ai pas compris ta question? est ce que tu peux poser les questions en se reférant à mon code ,ainsi je peux savoir où est la faute?!!!

ViPHP
ViPHP | 5462 Messages

15 août 2010, 18:32

J'ai pas compris ta question? est ce que tu peux poser les questions en se reférant à mon code ,ainsi je peux savoir où est la faute?!!!
y'a pas de code, pour affice ta vue tu fais comment http://localhost/truc/blabla ?

Eléphanteau du PHP | 17 Messages

17 août 2010, 03:56

salut!!
Voilà ,j'ai refait mon code.Je me retrouve avec un autre comportement mais toujours avec la meme erreur:

Code : Tout sélectionner

<?php class Supervision1Controller extends Zend_Controller_Action { public function init() { } public function indexAction() { } public function superviserAction() { $this->_helper->layout->disableLayout(); date_default_timezone_set('Australia/Sydney'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph.php'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph_pie.php'); include(APPLICATION_PATH . '/jpgraph/src/jpgraph_pie3d.php'); $tab=array(); $sortie=shell_exec('df'); file_put_contents('sortie.txt',$sortie); $ligne=file('sortie.txt'); $taille=count($ligne)-1; $pos=strpos($ligne[0],'Use%'); for($i=1; $i<=$taille;$i++) { $str=substr($ligne[$i],$pos,3); if(strlen($str)<3) { $str=trim($str,'%'); } $str=trim($str); $tab[$i]=intval($str); } $graph=new PieGraph(500,300); $graph->title->Set('Taux utilisation du disque dur'); $graph->img->SetMargin(40,140,20,40); $graph->img->SetImgFormat('png'); $p1=new PiePlot3D($tab); $graph->Add($p1); $graph->Stroke(); } }
et je mets le code suivant dans la vue superviser.phtml:

Code : Tout sélectionner

<html> <body> <img src="<?php $this->action(superviser,Supervision1);?>"/> </body> </html>
Benh, maintement lorsque je commente la ligne $graph->Stroke(); j'obtiens une image déchirée.mais lorsque je la laisse j'obtiens le meme message d'erreur!!
Prière de m'aider
Merci