Page 1 sur 1

Creation d'imge sur online.fr

Posté : 27 févr. 2008, 22:57
par GlobalWind
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

Posté : 27 févr. 2008, 23:21
par Alkann
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 ?

Posté : 27 févr. 2008, 23:26
par GlobalWind
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 ?)

Posté : 28 févr. 2008, 09:36
par Ryle
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à :)

Posté : 28 févr. 2008, 22:17
par GlobalWind
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

Posté : 28 févr. 2008, 23:15
par zeus
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.

Posté : 28 févr. 2008, 23:37
par GlobalWind
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

Posté : 29 févr. 2008, 02:59
par AB
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

Posté : 29 févr. 2008, 10:39
par GlobalWind
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

Posté : 29 févr. 2008, 11:33
par Ryle
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 :)

Posté : 29 févr. 2008, 13:28
par AB
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:

Posté : 29 févr. 2008, 20:33
par GlobalWind
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

Posté : 01 mars 2008, 23:08
par AB
Bizarre effectivement. moi ça ne fonctionnait avec FF ni en local ni sur le serveur distant online.