[RESOLU] Génération d'image

Eléphant du PHP | 68 Messages

01 août 2012, 22:32

Bonjour,
J'ai fait un script de génération d'image dynamique et il ne marche pas...
Je n'ai aucune idéé de se qui va pas^^
<?php session_start();header ("Content-type: image/png"); 
 ?>

<?php  
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
			  
if (empty($data{'port'})) {
  $finalport = 25565;
}

if (isset($data{'port'})) {
  $finalport = $data{'port'};

}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;



$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);

imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne: ", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);

imagepng($image); 
?>
Merci beaucoup!,
William

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 août 2012, 00:29

Et on peut éventuellement savoir ce que ça fait ? ce que ça devrait faire ? un message d'erreur ?
Si tu commentes le header, as-tu vérifié que tes variables retournent bien les résultats attendus ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 68 Messages

02 août 2012, 04:58

Salut,


require "./core.php"; Core c'est pour les adresse de connexion a la bdd.
require "./minequery.class.php"; C'est pour récupérer des informations sur un serveur MineCraft

Le but est de générer une image qui a le nombre de joueur connecté(ex: 17/100)
Et le nom du serveur.

J'ai tester mon script de génération d'image avec des variables dans les liens, sa marche mais quand je met tout sa en final sa donne sa: http://www.mineserver.ze.cx/statut/statut.php?id=162 qui n'est pas une très belle image^^


Merci,
William

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 août 2012, 11:00

Ben ça dépend si tu aimes les croix rouges ou pas ;)

Met en commentaire ta ligne header ("Content-type: image/png");
Ton code ne fonctionnera plus, mais quand tu appelleras l'image via le navigateur, ceci aura pour effet de te montrer les éventuels messages d'erreurs générés par php au lieu de mettre une croix rouge.

Ca sera plus facile pour les résoudre (genre s'il te dit que la librairie gd n'est pas active, qu'il ne trouve pas le fichier, etc. c'est quand même plus facile à résoudre que quand tu ne sais pas ce qui ne va pas).

Et une fois qu'il n'y aura plus d'erreur ou d'avertissement et que tu auras une chaine de texte incompréhensible, tu pourras remettre ton header et vérifier que l'image correspond bien à ce que tu attends :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 68 Messages

02 août 2012, 21:15

J'ai fait ce que tu ma dit,
il n'a aucune erreur et sa me donne sa:

Code : Tout sélectionner

‰PNG IHDR@@ä…9IYIDATxœíݽnÚPÆñLjfà ºFªš¹À[àš1í½´×P±u©TuÈ ‘¡C” ±&ªNw8Ä=õWlð±yñÿ·ÄûÅò“÷“(Žc=‹¢HŽ•ŸVgÐI1t\ïN§ ŒË©ß‡éÀ€a»E/½°b6›é¹ÓÃ†EOÌçó6ëPb<'Ûn¾ìÖÃt`À°œLK¥ß‡:0`#À€a0Œ†`À0F€Ã0`#À€a0Œ†`À0F€Ã0`XáßÄ:ÜrµJ¶ßœŸ‡;Ð[t`À° ØõÞÁ$é›$-¯W¢M£†\ëâ³$]¼—¤kþï!Ð<:0`XìÖºËèJÒW]IúÀê€p üé㥤/?î$éO¸ãýE؁ƒ¤³³3IR\þÅö@؁G£‘¤ív+Iâ}` yt`À°€x½^KÚl6’¤WáôVÈ¥ïææ&ÙžL&Õq’S‘{ܳ=?E')àúöáéöá)Š¢( µžL&\”硟lw`TD¼OUÀ¿{ûZÒÏå¯p‡(’;µÎN#SÔ•ÚH <¤Âòùp]E{ókHŽ›ûºJf+dºÞ¦¼\@îJ]¦ Žò¿²ÖÀò!.EµŠ¯RgI µÊx±øÔ‚ àÅýãâþq³Ù<߈nCêÛÅì7*á|±ó¼x¬½Ë8œ_|nu‹Gh¬ÿi3*¦TyñD·Mü}ñ[’4 ±s7ÁkvŸm^y_ån‰»ßûp„á5p•IÿlîS¹£Ü¶?¶Á¥]ɱڔZWÌd•â;y9½µ{‡v:&ÍçóŽŠ©§è© VeÙQ©ð§.;`ѨÔö(Þ?VvoÕ÷_ô’³Y*z½Õ˨r¢*–ZÆãq²=›Íd:À8Ä!ß,êîMɘ›X=•]«¡ÔÝ6àþ"i'ÀðM,0,g íÊÜÊŽ‡ûÊGÆq,ÉýÊ®ÿfRQâ:0`Xä:ðî“Lpl܏p¸äҁÃþëÀ»‡‚ý +‡ó3Kû¥žœ *ÀIEND®B`‚

ViPHP
xTG
ViPHP | 7331 Messages

03 août 2012, 06:55

Supprimes les espaces et retour à la ligne entre les ?> et <? Car c'est envoyé aussi et donc c'est rajouté à l'image ;)

Eléphant du PHP | 68 Messages

04 août 2012, 04:50

J'ai essayer de tout supprimer les espaces.
Mais sa ne marche pas.
Quel truc il faut supprimer?

ViPHP
xTG
ViPHP | 7331 Messages

04 août 2012, 09:18

Montres nous ton code modifié.

Eléphant du PHP | 68 Messages

05 août 2012, 05:07

Voila:
<?php
header ("Content-type: image/png");
?>
<?php
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
?>
<?php
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);

Eléphant du PHP | 68 Messages

05 août 2012, 05:07

Voila:
<?php
header ("Content-type: image/png");
?>
<?php
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
?>
<?php
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 août 2012, 09:54

Tu as encore un retour à la ligne entre ?> et <?php ... celui-ci est donc envoyé également au navigateur qui du coup ne sait plus interpréter l'image.

Il faut donc absolument coller les deux balises
<?php
header ("Content-type: image/png");
?><?php
$id = $_GET['id'];
...
Soit encore mieux, ne pas les fermer à cet endroit, puisque cela n'apporte rien :)
<?php
header ("Content-type: image/png");

$id = $_GET['id'];
...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 68 Messages

05 août 2012, 17:52

Voila,
Il n'a en plus et sa marche pas^^ soit je suis aveule ou soit...
header ("Content-type: image/png");
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 août 2012, 18:06

Euh... y a plus non plus de "<?php" au début du fichier dans ton dernier code... c'est une erreur de copier coller ? ou c'est une rage sanguinaire qui t'a poussé à la suppression sauvage et barbare de toutes les balises php ?

En supposant que ce soit le premier cas, que se passe-t-il si tu commence simplement par générer et afficher ton image back.png toute seule ? (en gros tu fais le imagecreatefrompng puis juste après le imagepng).
Si ça fonctionne tu rajoutes les autres actions une par une et tu regardes laquelle fait planter. Et si ça fonctionne pas.. euh.. faudra vérifier ton image :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 68 Messages

05 août 2012, 19:29

Non c'est une erreur de copier/coller^^

Ha non!!
C'est sa qui bug:

require "./core.php";
require "./minequery.class.php";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 août 2012, 21:12

De la même manière, que pour ton script principal, il ne faut rien envoyer d'autre au navigateur que l'image, donc ni espace, ni retour à la ligne, ni quoi que ce soit qui serait placé en dehors des balises <?php et ?>

Il te faut donc vérifier que tes scripts core.php et minequery.class.php commencent tous deux par un <?php dès la première ligne (sans espace, sans ligne vide, ... ou autre avant). Qu'il n'y a pas de "trou" comme dans ton script précédent (du code entre un ?> et un <?php). Qu'ils ne font ni echo, ni print, ni chépakoi qui ajouterai des choses dans l'image que tu essayes de générer :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...