Problème avec ma classe et la librairie GD.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec ma classe et la librairie GD.

par christopher » 07 mars 2007, 12:26

Par correcte j'entend que la librairie GD me génère une image PNG sur mon disque dur qui est sans defaut :shock: .

par titerm » 07 mars 2007, 11:52

Quand tu dis elle est correct, cad que si tu met le chemin dans la barre d'url du navigateur , elle s'affiche correctement ??

par christopher » 07 mars 2007, 11:13

J'ai fait la manipulation :
imagepng($this->idimg, 'pie.png');
Et j'obtient mon image PNG, elles est correcte.

par titerm » 07 mars 2007, 11:09

Dans ta fonction pie() a la fin
fais
imagepng($this->idimg,'/tmp/monimage.png');

et edit l'image /tmp/monimage.png avec un editeur quelquonque... Tu devrais y trouver des messages d'erreur au milieu du code binaire de l'image

par christopher » 07 mars 2007, 10:54

Sur ma page stat.php j'ai pas de code source !

Et voila le code source de ma page diag.php

Code : Tout sélectionner

<html> <head> </head> <body> <img src="Stat.php" /> </body> </html>

par titerm » 07 mars 2007, 10:42

Et quand je fait le ini_get() j'ai aucune erreur.
Je crois qu'on s'est mal compris, le ini_get sert juste a ton montrer ou se trouve le fichier d'erreur... Il faut ensuite aller le consulter...

par mere-teresa » 07 mars 2007, 10:37

Le code source HTML que donne-t-il ? (oui oui, là où il y a la croix rouge)

par christopher » 07 mars 2007, 10:15

Pour l'erreur j'ai trouvé, mon serveur ne trouvait pas le fichier arial.ttf pour la fonction imagettftext.

Et pour répondre a TicTac ma fonction renvoi un graphique avec un diagramme circulaire :wink:

Parcontre j'ai un gros problème !

J'obtient une image de 600x400px mais avec une croix rouge à la pace de mon graphique !

Et quand je fait le ini_get() j'ai aucune erreur.
<?php echo ini_get('error_log'); ?>
j'ai créé un librairie avec une multitude de classes donc je passe par un fichier qui me les rassemble toutes, mais quand je passe par se fichier ça plante il me dit qu'il ne trouve pas la classe !

Ma classe Lea.Stat.class.php :
<?php
class LeaStat {
	
	/* Size of Image */
	Private $idimg;
	Private $Frame = 20;
	Private $WidthImg;
	Private $HeightImg;
	Private $BG_Color = array();
	Private $Text_Size;
	Private $BlackColor;
	
	Public  $Title_Police = 'arial.ttf';
	Public 	$Title_Size = 30;
	Public  $Title_Color = array();
	Public  $Text_Police = 'arial.ttf';
	Public  $Text_Color = array();
	Public  $Pie_Size = 250;
	Public  $Pie_Thickness = 50;
	Public  $Rect_Size = 10;
	Public 	$Rect_Step = 25;
	
	Public function __construct() {
		$this->Text_Color = $this->RGBcolor(0, 0, 0);
		$this->Title_Color = $this->RGBcolor(0, 0, 0);
	}
			
	/**
	 * This function return an array of RGB color.
	 *
	 * @param Integer $Red
	 * @param Integer $Green
	 * @param Integer $Blue
	 * @return Array
	 */
	Public function RGBcolor($Red, $Green, $Blue) {
		return array('R' => $Red, 'G' => $Green, 'B' => $Blue);
	}
	
	/**
	 * This function define de background color.
	 *
	 * @param Array $BackGroundColor
	 */
	Public function BackGroundColor($Red, $Green, $Blue) {
		$this->BG_Color = $this->RGBcolor($Red, $Green, $Blue);
	}
	
	Private function CreateBackground($WidthImg, $HeightImg) {
		$this->WidthImg = $WidthImg;
		$this->HeightImg = $HeightImg;
		$this->idimg = imagecreate($this->WidthImg, $this->HeightImg);
		$Background = imagecolorallocate($this->idimg, $this->BG_Color['R'], $this->BG_Color['G'], $this->BG_Color['B']);
		$this->BlackColor = imagecolorallocate($this->idimg, 0, 0, 0);
	}
	
	Public function Pie($Title, $DefArray, $DataArray, $PourcentType = true, $DimEffect = true) {
        //...........................................
        //...........................................
        //.................................
        }
}
?>
Le fichier Lea.Config.php :
<?php
/* Language */
define('LANG', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

/* Folder Path */
define('HTTP_HOST', $_SERVER['HTTP_HOST']);
define('ROOT', $_SERVER['DOCUMENT_ROOT']);
define('FOLDER_PARENT', '');
define('FOLDER_LIB', 'Lib/');
define('FOLDER_CLASS', 'Class/');
define('FOLDER_CONFIG', 'Config/');
define('FOLDER_JAVA', 'Java/');
define('FOLDER_TEMPLATE', 'Templates/');
define('FOLDER_LANG', 'Languages/');
define('FOLDER_FONTS', 'Fonts/');
?>
Mon fichier lea.php du dossier Lib/ :
<?php
/* Define the constant */
require_once 'Lea.Config.php'; // Loading of file configuration.

/* Require the headers */
require_once FOLDER_CONFIG.'Lea.Init.php'; // PHP Initialization.

/* Loading of language file */
if(file_exists(FOLDER_PARENT.FOLDER_LIB.FOLDER_LANG.'Lea.Lang.'.LANG.'.php')) {
	require_once FOLDER_LANG.'Lea.Lang.'.LANG.'.php';
	$GLOBALS['lang'] = $lang;
} else {
	require_once FOLDER_LANG.'Lea.Lang.eng.php';
	$GLOBALS['lang'] = $lang;
}
		                   
/* Require the class */
require_once FOLDER_CLASS.'Lea.Connect.class.php'; // Class MySQL connection.
require_once FOLDER_CLASS.'Lea.String.class.php'; // Class String processing.
require_once FOLDER_CLASS.'Lea.Template.class.php'; // Class Templates engine.
require_once FOLDER_CLASS.'Lea.Session.class.php'; // Class Sessions processing.
require_once FOLDER_CLASS.'Lea.Cookies.class.php'; // Class Cookies processing.
require_once FOLDER_CLASS.'Lea.Auth.class.php'; // Class Authentification processing.
require_once FOLDER_CLASS.'Lea.Text.class.php'; // Class Text processing.
require_once FOLDER_CLASS.'Lea.Image.class.php'; // Class Image processing.
require_once FOLDER_CLASS.'Lea.Search.class.php'; // Class Search processing.
require_once FOLDER_CLASS.'Lea.Account.class.php'; // Class Account processing.
require_once FOLDER_CLASS.'Lea.Date.class.php'; // Class Calendar processing.
require_once FOLDER_CLASS.'Lea.Mail.class.php'; // Class Mail processing.
require_once FOLDER_CLASS.'Lea.Stat.class.php'; // Class Stat processing.

/* Print informations library */
$LeaTemplate = new LeaTemplate(FOLDER_PARENT.FOLDER_LIB.FOLDER_TEMPLATE);
$LeaTemplate->SetFile("Infos", "Lea.Infos.tpl");
$LeaTemplate->ParseDisplay("Infos");

?>
Ma page qui appel la librairie et ou je créé mon objet :
<?php
        // Avec ce chemin ci ça fonctionne :
        // require_once 'Lib/Class/Lea.Stat.class.php';
        // Mais pas avec celui-ci :
        require_once 'Lib/Lea.php';


	$Def = array('Hewlett-Packard', 'Packard Bell', 'Dell', 'Acer', 'Fujitsu Siemens', 'Autres');
	$Data = array(17.80, 13.90, 12.40, 12.10, 6.00, 38.00);
	$Title = 'Etude du marché français de la micro-informatique';
	
	/* Object creating */
	$Pie = new LeaStat();
	$Pie->BackGroundColor(240, 240, 255);
	$Pie->Title_Size = 15;
	$Pie->Title_Color = $Pie->RGBcolor(0, 0, 0);
	$Pie->Pie($Title, $Def, $Data);
?>

par titerm » 07 mars 2007, 09:31

Tu vas dans le répertoire log de ton apache, et tu regarde le contenu de php_error.log...

Il se trouve ici
echo ini_get('error_log');
Tu vas constater que tu as probablement une erreur php et que ducoup, le contenu de ton image n'est pas valide.

Pour débugger, tu peux appeler directement dans la barre d'url du navigateur ton fichier Lib/Class/Lea.Stat.class.php, et si dans ta fonction Pie() tu commentes temporairement le header('Content-type',...) tu verras s'afficher les messages d'erreur s'il y en a.

par Tictac » 07 mars 2007, 07:48

que retourne cette fonction => $Pie->Pie($Title, $Def, $Data, PERCENT_ON, EFFECT_3D_ON); ?

Ca pourrait aider à comprendre !

par christopher » 07 mars 2007, 00:34

J'ai changé le chemin de mon require_once et maintenant quand je lance ma page stat.php j'ai un message d'erreur :
L'image “http://www.tableadmin.info/LeaLibrary2/Stat.php” ne peut être affichée car elle contient des erreurs.
require_once 'Lib/Class/Lea.Stat.class.php';
Sinon :

J'ai fait se que tu m'a dit mais toujours rien !

Ma page Stat.php
<?php
	require_once 'Lib/Lea.php';

	$Def = array('Hewlett-Packard', 'Packard Bell', 'Dell', 'Acer', 'Fujitsu Siemens', 'Autres');
	$Data = array(17.80, 13.90, 12.40, 12.10, 6.00, 38.00);
	$Title = 'Etude du marché français de la micro-informatique';
	
	/* Object creating */
	$Pie = new LeaStat();
	$Pie->BackGroundColor(240, 240, 255);
	$Pie->Title_Size = 15;
	$Pie->Title_Color = $Pie->RGBcolor(0, 0, 0);
	$Pie->Pie($Title, $Def, $Data, PERCENT_ON, EFFECT_3D_ON);
?>
Ma page d'affichage :

Code : Tout sélectionner

<html> <head> </head> <body> <img src="Stat.php" /> </body> </html>
Je comprend vraiment pas ! Y a t'il une option a activer ?
Je travail sous PHP 5, cela a-t-il une influence ?

par christopher » 07 mars 2007, 00:05

J'ai changé le chemin de mon require_once et maintenant quand je lance ma page stat.php j'ai un message d'erreur :
L'image “http://www.tableadmin.info/LeaLibrary2/Stat.php” ne peut être affichée car elle contient des erreurs.
require_once 'Lib/Class/Lea.Stat.class.php';
Sinon :

J'ai fait se que tu m'a dit mais toujours rien !

Ma page Stat.php
<?php
	require_once 'Lib/Lea.php';

	$Def = array('Hewlett-Packard', 'Packard Bell', 'Dell', 'Acer', 'Fujitsu Siemens', 'Autres');
	$Data = array(17.80, 13.90, 12.40, 12.10, 6.00, 38.00);
	$Title = 'Etude du marché français de la micro-informatique';
	
	/* Object creating */
	$Pie = new LeaStat();
	$Pie->BackGroundColor(240, 240, 255);
	$Pie->Title_Size = 15;
	$Pie->Title_Color = $Pie->RGBcolor(0, 0, 0);
	$Pie->Pie($Title, $Def, $Data, PERCENT_ON, EFFECT_3D_ON);
?>
Ma page d'affichage :

Code : Tout sélectionner

<html> <head> </head> <body> <img src="Stat.php" /> </body> </html>
Je comprend vraiment pas ! Y a t'il une option a activer ?
Je travail sous PHP 5, cela a-t-il une influence ?

par titerm » 06 mars 2007, 21:26

En gros, tu fais un 3eme fichier dans lequel tu appels le fichier qui instancie la class et génère ton image, ton fichier Stat.php

3emefichier.php ou .html pour le coup vu qu'il n'y a pas de php dedans pour cet exemple


Code : Tout sélectionner

<html> <head> <title>image test</title> </head> <body> <img src="Stat.php"> </body> </html>

par christopher » 06 mars 2007, 19:17

Salut, et encore merci pour ta réponse...

Mais malheureusement je n'ai pas trop compris...

Je vais être lourd, mais peut m'expliquer un peu plus ta première solution ???

Merci beaucoup.

par titerm » 06 mars 2007, 08:43

Tu créés une classe qui génère une image, et tu fourni en source a l'image cette classe....
Dans la page principale, tu instancies la classe, tu appelles ses fonctions et rien...

Il faut
- soit fournir a ton image le source qui génère l'image (la class et son instantiation et utilisation).

- Soit faire comme tu as fais mais ne pas utiliser de source externe pour l'image mais la définir en inline avec la balise suivante

<img src="data:image/gif;base64,DATA">

ou DATA sera le résultat de ta fonction Pie() sans le header et encoder en base 64 via base64_encode...

La mauvaise nouvelle, c'est que IE (même le 7) gère mal cette partie de la norme HTML et donc tu n'as vraiment le choix que d'utiliser la 1ère methode.