Afficher une variable dans une image php

Eléphanteau du PHP | 17 Messages

06 mars 2012, 13:49

Bonjour, j'expose mon problème :

On upload un fichier -> on le retrouve sur la page d'accueil, avec une image (suivant le type de fichier que c'est)
J'aimerais afficher l'image avec le nom du fichier SUR l'image..

Voici mon code source de : image1.php

Code : Tout sélectionner

<?php header('Content-type: image/png'); $img = imagecreatefrompng('images/FL.png'); $noir = imagecolorallocate($img, 0, 0, 0); imagettftext($img, 20, 0, 15, 30, $noir, 'chopin_script.ttf', $lien); imagepng($img); ?>
Là où je bug, c'est sur le $lien car cette variable est une variable appelée sur la page d'accueil :

Code : Tout sélectionner

foreach($fichier as $lien) { echo "<a href=\"$dir_nom/$lien \"><img src=image1.php></a>"; else echo "blablablalbabla"; }
Le problème c'est que si je mets "123" à la place de $lien, il y a marqué 123 sur l'image.. Sinon ça fait la petite icone comme quoi l'image ne peut être affichée.

Avez vous une solution svp ?

Eléphant du PHP | 209 Messages

06 mars 2012, 14:26

Salut,

Il faut juste que ta variable $lien soit connue d'une manière ou d'une autre à l'endroit où tu crées ton image..

Si tu es capable de créer ton image à partir d'un nom, tu as juste à récupérer ce nom.. ? :roll: (pas sûr d'avoir tout compris moi #-o )

++

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 14:36

Il faut faire transiter la variable $lien dans l'url et la récupérer dans le tableau $_GET. ;)

Eléphanteau du PHP | 17 Messages

06 mars 2012, 14:39

Il faut faire transiter la variable $lien dans l'url et la récupérer dans le tableau $_GET. ;)
Je me doutais, mais comment faire ? Et puis il faut une sécurité aussi car si on tape dans l'adresse ?lien=blablabla, faut que ça modifie rien ..

Pourrais-tu m'éclairer ? Ou me proposer un morceau de code ?

Merci :)

EDIT :
Comment je peux poster $lien dans image.php ?
$_POST['lien'] in /image.php ?

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 17:11

Si ton but est de protéger la valeur vaut mieux passer par une variable de session dans ce cas.
Car tout ce qui transite par GET ou POST est forcement émis depuis le client et donc modifiable...
<?php
session_start();
$_SESSION['lien'] = 'http://mondomaine.com';
echo '<img src="image.php" alt="" />';
?>
<?php
session_start();
header('Content-type: image/png');
$img = imagecreatefrompng('images/FL.png');
$noir = imagecolorallocate($img, 0, 0, 0);
$lien = (isSet($_SESSION['lien'])) ? $_SESSON['lien'] : '';
imagettftext($img, 20, 0, 15, 30, $noir, 'chopin_script.ttf', $lien);
imagepng($img);
?>
Et si tu dois gérer plusieurs images sur une même page utilises un tableau et passes dans l'url l'index du lien correspondant.

Eléphanteau du PHP | 17 Messages

06 mars 2012, 18:11

Ce que je voulais savoir, c'est comment envoyer un $_POST dans une autre page sans formulaire ?

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 19:12

Tu ne peux pas, on peut à la rigueur passer par de l'Ajax pour simuler un formulaire mais tu n'auras pas de redirection du fait de la requête asynchrone.

Eléphanteau du PHP | 17 Messages

06 mars 2012, 19:31

J'ai essayé avec ce que tu m'as donné, mais ça me fait toujours le même problème, ça me met l'icone comme quoi l'image peut pas etre affichée..

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 19:36

Et si tu accèdes à l'image via son url directement dans le navigateur ?
De plus pour voir les erreurs PHP tu peux mettre en commentaire la fonction imagepng().

Eléphanteau du PHP | 17 Messages

06 mars 2012, 19:51

Et si tu accèdes à l'image via son url directement dans le navigateur ?
De plus pour voir les erreurs PHP tu peux mettre en commentaire la fonction imagepng().
$lien = (isSet($_SESSION['lien'])) ? $_SESSON['lien'] : '';
Si je mets cette ligne en commentaire et que je change le texte $lien par "123" ça marche.
Si je la garde, quoi qu'il arrive, l'image ne s'affiche pas, et meme quand je met le texte en "123".
J'ai mi la fonction imagepng() en commentaire, il ne m'affiche aucune erreur.

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 20:03

Ah oui il manque un "i" dans le nom de la variable. :P
Et si tu n'as pas d'erreur c'est que ta configuration PHP n'est pas configurée pour les afficher.

Eléphanteau du PHP | 17 Messages

06 mars 2012, 20:09

Merci ! J'ai corrigé, le "i" de SESSION, il était furtif ;)
Modifié en dernier par Switi le 06 mars 2012, 20:20, modifié 2 fois.

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 20:14

Mea culpa pour l'affichage des erreurs, il aurait fallu aussi commenter le header. :P

Eléphanteau du PHP | 17 Messages

06 mars 2012, 20:20

Mea culpa pour l'affichage des erreurs, il aurait fallu aussi commenter le header. :P
Pas trop compris ce que tu voulais dire ! Mais oui apparait un autre problème : j'affiche plusieurs fois l'image donc avec du texte différent dessus..
Il faut donc faire une session_start() à chaque fois mais aussi finir cette session, c'est possible ?
Car si j'utilise session_destroy() il ne va pas m'afficher de texte sur les images..

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 20:40

Non ça ne fonctionnera pas ainsi...
Il faut savoir que le PHP s'exécute côté serveur et le HTML côté client.
Donc lorsque le HTML s'affiche le PHP a déjà fini.
Mais une balise IMG fait une requête pour chaque image au serveur.

Donc si tu as deux images avec ce script on pourra dérouler le fonctionnement ainsi :
Exécution PHP
Affichage résultat HTML
Requête IMG 1 => Exécution PHP
Requête IMG 2 => Exécution PHP

En gros c'est comme si tu naviguais vers deux liens différents l'affichage des deux images.

Donc pour résoudre ce problème il faut utiliser un tableau de lien en session (comme je te l'avais proposé au début) et utiliser un paramètre dans l'appel du script image (GET) avec l'index du tableau contenant l'url.
Ainsi les liens sont toujours côté serveur et l'utilisateur ne peut pas les modifier.
Le pire qu'il puisse faire c'est de mettre un autre index mais il sera limité aux valeurs du tableau et ne pourra donc pas afficher n'importe quelle url.