Creation d'imge sur online.fr

Eléphanteau du PHP | 31 Messages

27 févr. 2008, 22:57

Bonjour,

je cherche une aide pour résoudre un problème de création d'image sur online.

Le script fonctionne très bien en local, il fonctionne bien sur free, mais pas sur online : l'image (il s'agit d'u code de proctection ne s'affiche pas du tout, mais aucun message d'erreur particulier).

y a t-il une manip particulière pour activer la fonctionlité ou ai-je commis une erreur ?

Le code de création :
// demarrage d'un session pour conserver la valeur de session
if (!isset($_SESSION)) {
    session_start();
    }
// liste des valeurs our creation d'un code temporaire
$liste = "abcdefghijklmnpqrstuvwxyz123456789ABCDEFGHILKLMNPQRSTUVWXYZ";
// creation de la valeur du code temporaire
$code ='';
while (strlen($code) != 5) {
    $code .= $liste[rand(0,60)];
    };

// definition de la valeur de session code
$_SESSION['code']=$code;

// creation de l'image 50 x 20 pixels modifiables
$larg=50;
$haut=18;
$img =  imagecreatetruecolor($larg,$haut);
$rouge = imageColorAllocate ($img,255,0,0);
$noir = imageColorAllocate ($img,0,0,0);
$code_police=5;
header('Expires : Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-control: no-store, no-cache, must-revalidate');
header('Cache-control: post-check=0 , pre-check=0' , false);
header("Content-type : image/jpeg");
// incorporation de la variable $code dans l'image
imageString($img, $code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0, $code,$rouge);
//on créé une image de mauvaise qualité ic 80%
imagejpeg($img,'',80);
imageDestroy($img);
Le code où doit s'afficher l'image :
<img style="line-height: 1.8; margin-left: 1em;" src="../../include/protected/image_code.inc.php" />
Merci si qq a une idée.

merci par avance

Eléphant du PHP | 79 Messages

27 févr. 2008, 23:21

La lib GD n'est peut être pas présente sur Online.
Qu'est ce que ça donne si tu appelles directement l'url de l'image ? As un message d'erreur ?

Eléphanteau du PHP | 31 Messages

27 févr. 2008, 23:26

Merci pour ton aide
La lib GD est activé . Dans le cas contraire j'aurai surement un message.
comment faire pour appel directement l'url de l'image (puisqu'elle est créé à la volée ?)

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

28 févr. 2008, 09:36

Ben.... tu tapes son url dans ton navigateur (l'url du script php en fait) et tu arrives directement dessus :)

S'il y a une erreur lors de l'exécution du script, tu la verras à cet endroit là :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 31 Messages

28 févr. 2008, 22:17

En entrant directement l'adresse du script dans un navigateur, même en local (alors que l'image s'affiche coreectmeent), j'obtiens un résultat ... étrange :

ÿØÿà�JFIF������ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 80 ÿÛ�C� %# , #&')*)-0-(0%()(ÿÛ�C (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀ���2"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 févr. 2008, 23:15

Ce que tu vois est le contenu binaire de l'image.
Visiblement, le header() qui est sensé indiquer au navigateur qu'il s'agit d'une image ne fonctionne pas et, du coup, ton navigateur affiche le contenu textuel de l'image.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 31 Messages

28 févr. 2008, 23:37

Le script est inclu dans :

<img style="line-height: 1.8; margin-left: 1em;" src="../../include/protected/image_code.inc.php" />

en revanche j'ai une erreur de type 500 : Je suis chez online.
J'ai bien un dossier sessions a la racine et un htaccess de base qui ne m'a jamais causé de pb.

merci

ViPHP
AB
ViPHP | 5818 Messages

29 févr. 2008, 02:59

Y'avait quelques fautes dans ton script comme l'a indiqué Zeus
<?php
// demarrage d'un session pour conserver la valeur de session
if (!isset($_SESSION)) {
    session_start();
    }
// liste des valeurs our creation d'un code temporaire
$liste = "abcdefghijklmnpqrstuvwxyz123456789ABCDEFGHILKLMNPQRSTUVWXYZ";
// creation de la valeur du code temporaire
$code ='';
while (strlen($code) != 5) {
    $code .= $liste[rand(0,60)];
    };

// definition de la valeur de session code
$_SESSION['code']=$code;

// creation de l'image 50 x 20 pixels modifiables
$larg=50;
$haut=18;
$img =  imagecreatetruecolor($larg,$haut);
$rouge = imagecolorallocate ($img,255,0,0);
$noir = imagecolorallocate ($img,0,0,0);
$code_police=5;
header("Expires : Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-control: no-store, no-cache, must-revalidate");
header("Cache-control: post-check=0 , pre-check=0" , false);
header("Content-Type: image/jpeg");
// incorporation de la variable $code dans l'image
imagestring($img, $code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0, $code,$rouge);
//on créé une image de mauvaise qualité ic 80%
imagejpeg($img,'',80);
imagedestroy($img); ?>
ci-dessus le code que j'ai placé chez online à l'adresse http://www.collectifodma.net/Untitled-image_create2.php

ça passe avec tous les réglages par défaut, testé avec Ie et FF

Edit Moi qui n'ai pas un écran très lumineux c'est quasiment illisible mais ça fonctionne

Eléphanteau du PHP | 31 Messages

29 févr. 2008, 10:39

Merci pour ton aide.
mais j'ai beau chercher et comparer els codes (le mien et celui que tu as mis sur ton dernier post), je en vois pas de différence.

Ou sont mes erreurs ?
Merci

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

29 févr. 2008, 11:33

Il y en a peut être d'autres, mais la plus flagrante me semble être l'espace en trop dans ton code entre "Content-Type" et les ":" qui le suivent :
header("Content-Type : image/jpeg"); 
// au lieu de 
header("Content-Type: image/jpeg"); 
Si le header n'est pas ou est mal envoyé, le navigateur ne saura pas l'interpréter et il considerera effectivement le code binaire de l'image et non le fichier qu'il pourrait constituer :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

29 févr. 2008, 13:28

Il y en a peut être d'autres, mais la plus flagrante me semble être l'espace en trop dans ton code entre "Content-Type" et les ":" qui le suivent :
header("Content-Type : image/jpeg"); 
// au lieu de 
header("Content-Type: image/jpeg"); 
Si le header n'est pas ou est mal envoyé, le navigateur ne saura pas l'interpréter et il considerera effectivement le code binaire de l'image et non le fichier qu'il pourrait constituer :)
En fait il n'y avait que celle-ci qui faisait planter avec FF et non avec IE. Les autres n'était pas réellement des fautes mais une syntaxe un peu bizarre avec des majuscules dans les noms des fonctions natives (qui ne servaient à rien, c'est pas du JS).

Donc cela ne venait pas d'online mais du fait qu'en local tu devais vérifier avec IE et que sur le site distant tu devait vérifier avec FF et FF n'aime pas les entêtes mal écrites.

N'oublies pas de mettre résolu pour faire savoir que ce topic contient une solution :wink:

Eléphanteau du PHP | 31 Messages

29 févr. 2008, 20:33

Merci pour votre aide : effectivement, tout vient de l'espace dans le header.
Mais ce qui est etonnant :
en local sous firefox : ca fonctionnait
on line sous frefox : ca ne fonctionnait pas

Merci pour avoir trouvé la solution

ViPHP
AB
ViPHP | 5818 Messages

01 mars 2008, 23:08

Bizarre effectivement. moi ça ne fonctionnait avec FF ni en local ni sur le serveur distant online.