Affichage d'une image avec un nom variable

Eléphant du PHP | 117 Messages

28 mai 2005, 06:41

Bonjour,

Voici mon problème:
Je génère une image avec un nom variable: $nomplan
(J'utilise une fonction de création d'un chaine aléatoire que je concatène avec l'extension.png et ce n'est pas le problème)


imagepng($image,$nomplan);

l'image est bien créé avec l'extension png
cela donne par exemple :muBgIncW8I.png
je peux visualiser l'image produite en la lançant directement depuis le repertoire où elle à ete déposée.

BON

Maintenant j'ai un problème pour la lancer avec la commande img scr
Voici ce que je pense être bon:
<p>
<br />
<img src=$nomplan />
</p>

Mais l'image ne s'affiche pas (petit carré vide)

Pouvez-vous m'aider ?

Mammouth du PHP | 19672 Messages

28 mai 2005, 09:07

Salut,
si tu mélanges sans discernement html et PHP, ça risque fort de ne pas fonctionner : dans du HTML, il faut encadrer le PHP de balises <?php et ?> et dans du PHP, on concatène les chaines quand on veut mettre un mélange des deux.
Donc en html, ça doit donner :
 <img src="<?php echo($nomplan); ?>" /> 
Et dans une chaine PHP ça aurait été:
echo("<img src=\"". $nomplan ."\" />");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 10:54

Merci Cyrano,

Je suis loin de ces exigeances.

J'ai donc essayé de remplacer mon code ocmme tu me le dis, mais j'abouti au même resultat !!!

Dans tous les sens et cela me fait toujpours rien

Mammouth du PHP | 19672 Messages

28 mai 2005, 11:01

Fais-nous donc voir ce bout de code, on va trouver le bobo ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 11:09

// création du plan dans le fichier image plan.png

$code= generer_code();

$nomplan= "$code".".png";

imagepng($image,$nomplan);


?>


<p>
<br />
<img src=$nomplan />
</p>


<?
unlink ($nomplan);
//effacement du fichier;
?>






//Fonction utilisée pour la génération du code

function generer_code()
{
$code = "" ;
$valeur =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
for($i = 1 ; $i < 11 ; $i++)
$code .= substr($valeur,rand(1,62),1) ;
return $code ;
}

Mammouth du PHP | 19672 Messages

28 mai 2005, 11:23

Bon ok, j'ai fait la correction sur ton fichier qui devient ceci : (explications après)
<?php
// création du plan dans le fichier image plan.png

$code= generer_code();

$nomplan= "$code".".png";

imagepng($image,$nomplan);


?>


<p>
<br />
<img src="<?php echo($nomplan); ?>" />
</p>


<?
unlink ($nomplan);
//effacement du fichier;
?>

<?
//Fonction utilisée pour la génération du code

function generer_code()
{
    $code = "" ;
    $valeur =
    "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    for($i = 1 ; $i < 11 ; $i++)
    $code .= substr($valeur,rand(1,62),1) ;
    return $code ;
}
?>
Ce qui se passe, c'est que l'adresse indiquée pour la source du fichier telle quelle implique que l'image est dans le même répertoire que le fichier qui l'appelle. Sinon, il faut modifier l'origine du fichier comme ceci:
<p>
<br />
<img src="./chemin/vers/repertoire/image/<?php echo($nomplan); ?>" />
</p>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 11:45

Merci beaucoup Cyrano,

En fait chez moi il semble qu'il y ai une accumulation de 2 problèmes.
Le premier vient d'être réglé grace à toi.

Maintenant si j'active la fonction unlink aprsè ... ça recommance !

<p>
<br />
<img src="<?php echo($nomplan); ?>" />
</p>

<?
unlink ($nomplan);
//effacement du fichier;
?>


Dès que je fais

<p>
<br />
<img src="<?php echo($nomplan); ?>" />
</p>


<?
//unlink ($nomplan);
//effacement du fichier;
?>

c'est bon mais je ne détruits pas le fichier de travail et je fais une accumlation de fichiers aléatoires dans mon répértoire !!!

Mammouth du PHP | 19672 Messages

28 mai 2005, 11:53

Tu dois faire la même chose avec unlink();
unlink ("./chemin/vers/repertoire/image/". $nomplan);
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 13:07

Mon fichier est dans le même répertoire,
et ça ne règle pas le PB, on dirait que unlink efface le fichier avant que l'affichage ai pu se faire .

Mammouth du PHP | 19672 Messages

28 mai 2005, 13:15

Forcément, si le unlink est avant la ligne d'affichage, tu vas ruiner ton boulot.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 13:23

Oui je suis d'accord, mais il est bien APRES !

Mammouth du PHP | 19672 Messages

28 mai 2005, 13:31

Depuis un petit moment, je comprends mal l'idée de supprimer le fichier après l'avoir affiché. Quelle est l'idée générale de ton système ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 13:39

Ouh la ça va être difficile d'expliquer.

Je me heurtais à la création d'une image avec
header ("Content-type: image/png");
Je ne sais pas pourquoi d'ailleurs , j'appelais des fonctions etc..
Je suis passé outre en créant une image sur un répertoire .

Cela marche bien ... sauf que Windows XP memorise dans son buffer les images en provenance d'internet et certains PC's s'obstinaient à afficher le rafraichissement, d'où l'idée de créer à chaque fois une image avec un nom aléatoire, de faire le traitement et l'affichage, puis une fois l'affichage fait à l'internaute, détruire le fichier qui ne sert plus à rien.

Eléphant du PHP | 117 Messages

28 mai 2005, 13:43

Lire

PC's s'obstinaient à ne pas afficher le rafraichissement

Eléphant du PHP | 117 Messages

28 mai 2005, 13:53

On dirait que PHP execute d'abord tout , pour envoyer ensuite au client le resualta de son traitement. Ne peut on pas forcer à envoyer l'image au client d'abord et terminer ensuite (effacement du fichier) ?