Discussion:
comment afficher $img ?
(trop ancien pour répondre)
alainL
2009-11-07 20:21:05 UTC
Permalink
Bonsoir,
J'essaie d'afficher une image en fonction du jour. Le jour s'affiche
mais pour l'image, j'obtiens le message suivant :

<<L'image "http://localhost/essais/dates.php" ne peut être affichée car
elle contient des erreurs.>>

J'essaie d'afficher avec echo ou en html en revalidant les commentaires
mais sans plus de réussite !(je préfèrerais utiliser la variable dans
du code html)
Merci pour vos conseils !



<? # header("Content-type: image/gif");

$jour=date("D");

switch ($jour)
{
case "Mon":
echo "lundi";
$img='image2.gif';
break;
case "Tue":
echo"mardi";
$img='image3.gif';
break;
case "Wed":
echo "mercredi";
$img='image4.gif';
break;
..................

}

# readfile($img);
echo '<img src="$img" />';
?>

<!-- <img src="img.php" alt=""/> -->
--
Alain L

Mon village en Haute Soule : http://autourdalos.fr
Carnet de voyages: http://autourdalos.fr/Randobal
Bruno Desthuilliers
2009-11-08 09:36:16 UTC
Permalink
alainL a écrit :
(snip)
Post by alainL
<<L'image "http://localhost/essais/dates.php" ne peut être affichée car
elle contient des erreurs.>>
<? # header("Content-type: image/gif");
$jour=date("D");
switch ($jour)
{
echo "lundi";
$img='image2.gif';
break;
echo"mardi";
$img='image3.gif';
break;
echo "mercredi";
$img='image4.gif';
break;
..................
}
# readfile($img);
echo '<img src="$img" />';
?>
Si tu mets un content-type image/gif, il faut retourner un gif, pas du
html (ou aucun autre format texte).
Olivier Miakinen
2009-11-08 09:36:16 UTC
Permalink
Post by alainL
J'essaie d'afficher une image en fonction du jour. Le jour s'affiche
<<L'image "http://localhost/essais/dates.php" ne peut être affichée car
elle contient des erreurs.>>
J'essaie d'afficher avec echo ou en html en revalidant les commentaires
mais sans plus de réussite !
Euh... il faut choisir : soit ton code affiche du texte soit il retourne
une image, mais ça ne peut pas être les deux à la fois. Du coup c'est
normal si ça ne marche pas !
Post by alainL
(je préfèrerais utiliser la variable dans
du code html)
Je n'ai pas compris cette remarque. Au besoin, tu reformuleras si ma
réponse ne correspond pas à ce que tu cherches (ce n'est d'ailleurs pas
la première fois que j'ai du mal à te comprendre).
Post by alainL
Merci pour vos conseils !
À priori, je pencherais pour :

<?php
header("Content-Type: image/gif");

$jour=date("D");

switch ($jour) {
case "Mon":
$img='image2.gif';
break;
case "Tue":
$img='image3.gif';
break;
case "Wed":
$img='image4.gif';
break;
...
}

readfile($img);
?>

D'ailleurs, quand on ne s'en sort pas, la meilleure des choses à faire
c'est de commencer par plus simple :

<?php
header("Content-Type: image/gif");
$img='image2.gif';
readfile($img);
?>

Cordialement,
--
Olivier Miakinen
alainL
2009-11-08 15:58:30 UTC
Permalink
Post by Olivier Miakinen
Post by alainL
J'essaie d'afficher une image en fonction du jour. Le jour s'affiche
.................
Post by Olivier Miakinen
D'ailleurs, quand on ne s'en sort pas, la meilleure des choses à faire
<?php
header("Content-Type: image/gif");
$img='image2.gif';
readfile($img);
?>
Cordialement,
Merci. J'ai donc fait on ne peut plus simple.
______________________________________________________
EasyPHP1.7 est lancé
Les images sont dans le répertoire de date.php

Avec ce petit bout de code :

<body>
<?php
header("Content-Type: image/jpg");
$img='acacia01.jpg';
readfile($img);
?>
</body>

- L'aperçu de Ffx donne ça: " http://localhost/essais/date.php "
- Celui de IE me propose d'ouvrir un fichier de type phpfile... mais
aboutit à une page qui décrit le fichier
exif et affiche du code du genre " 3!1AQa"q2‘¡±B#$RÁb34r‚..."

- Pareil avec image/gif et image.gif.
--
Alain L

Mon village en Haute Soule : http://autourdalos.fr
Carnet de voyages: http://autourdalos.fr/Randobal
Olivier Miakinen
2009-11-08 16:10:36 UTC
Permalink
Post by alainL
Post by Olivier Miakinen
header("Content-Type: image/gif");
Ok.
Post by alainL
header("Content-Type: image/jpg");
RTFM :

<http://www.iana.org/assignments/media-types/image/>
image
[...]
gif [RFC2045,RFC2046]
ief Image Exchange Format [RFC1314]
jp2 [RFC3745]
jpeg [RFC2045,RFC2046] <<<=== là
jpm [RFC3745]
[...]
</>
Post by alainL
- Pareil avec image/gif et image.gif.
Pour image2.gif, comme dans ta question précédente ? Ou pour
acacia01.jpg comme maintenant ?
--
Olivier Miakinen
alainL
2009-11-08 20:49:17 UTC
Permalink
Post by Olivier Miakinen
Post by alainL
Post by Olivier Miakinen
header("Content-Type: image/gif");
Ok.
Post by alainL
header("Content-Type: image/jpg");
<http://www.iana.org/assignments/media-types/image/>
image
[...]
gif [RFC2045,RFC2046]
ief Image Exchange Format [RFC1314]
jp2 [RFC3745]
jpeg [RFC2045,RFC2046] <<<=== là
jpm [RFC3745]
[...]
</>
????? même avec la traduction je ne sais pas quoi faire de ce RFC2045 :-(
Post by Olivier Miakinen
Post by alainL
- Pareil avec image/gif et image.gif.
Pour image2.gif, comme dans ta question précédente ? Ou pour
acacia01.jpg comme maintenant ?
Même comportement avec Content-type : image/jpg et $img=acacia01.jpg
que pour Content-type : image/gif et $img=image2.gif.


Mais est-il absolument nécessaire de définir un Content-type et
d'utiliser readfile ?

Ma réponse à Bruno mentionnait ce code (qui marche avec ma config) dans
lequel un echo affiche l'image aléatoire passée par une variable. Ca
devrait marcher pour mon truc ! ? J'ai essayé echo '<img src="'$img'"> à
la sortie de mon switch mais sans succès.

<?php
$images = array(
'image1.jpg',
'acacia01.jpg',
'photo1.jpg',
'vg_pourpier.gif',
);
$moment = (int)date('dHis');
$count = count($images)-1;
srand($moment);
echo '<img src="'.$images[rand(0,$count)].'" />';
?>

Merci pour ton aide
--
Alain L

Mon village en Haute Soule : http://autourdalos.fr
Olivier Miakinen
2009-11-08 23:19:00 UTC
Permalink
Post by alainL
Post by Olivier Miakinen
Post by alainL
header("Content-Type: image/jpg");
<http://www.iana.org/assignments/media-types/image/>
image
jpeg [RFC2045,RFC2046] <<<=== là
</>
????? même avec la traduction je ne sais pas quoi faire de ce RFC2045 :-(
Je le fais en plus court :
<http://www.iana.org/assignments/media-types/image/>
image
jpeg <<<=== là
</>

Le type MIME est image/jpeg et pas image/jpg.
Post by alainL
Même comportement avec Content-type : image/jpg et $img=acacia01.jpg
C'est donc normal, ou du moins pas surprenant.
Post by alainL
que pour Content-type : image/gif et $img=image2.gif.
Ah ? Tu pourrais mettre ton script et l'image sur un site accessible au
public, pour qu'on puisse voir ce qui cloche ?
Post by alainL
Mais est-il absolument nécessaire de définir un Content-type et
d'utiliser readfile ?
Non, bien sûr, mais j'essayais de t'aider à le faire fonctionner puisque
tu avais l'air de vouloir le faire.
Post by alainL
Ma réponse à Bruno
...
Post by alainL
mentionnait ce code (qui marche avec ma config) dans
lequel un echo affiche l'image aléatoire passée par une variable. Ca
devrait marcher pour mon truc ! ? J'ai essayé echo '<img src="'$img'"> à
la sortie de mon switch mais sans succès.
<?php
$images = array(
'image1.jpg',
'acacia01.jpg',
'photo1.jpg',
'vg_pourpier.gif',
^
Je serais toi, je supprimerais cette virgule. Je n'arrive pas à trouver
dans la doc comme c'est censé être interprété, mais il vaudrait mieux
que ça ne rajoute pas une cinquième valeur vide lorsque tu n'en veux que
quatre.
Post by alainL
);
$moment = (int)date('dHis');
$count = count($images)-1;
srand($moment);
echo '<img src="'.$images[rand(0,$count)].'" />';
Ça devrait marcher, sauf bien sûr si par malchance ton tableau contient
une valeur vide et que c'est celle-ci qui est choisie par hasard. Mais
as-tu eu la curiosité d'aller voir le HTML généré pour savoir si c'est
le code PHP qui échoue, ou si le navigateur n'arrive pas ensuite à lire
l'image ?

Quand ça marchera, note que tu devrais pouvoir remplacer tes quatre
dernières lignes par une seule :
echo '<img src="'.array_rand(array_flip($images)).'" />';

Cordialement,
--
Olivier Miakinen
alainL
2009-11-09 10:42:10 UTC
Permalink
Olivier Miakinen a écrit :
........
Post by Olivier Miakinen
Ah ? Tu pourrais mettre ton script et l'image sur un site accessible au
public, pour qu'on puisse voir ce qui cloche ?
ci-dessous
Post by Olivier Miakinen
Non, bien sûr, mais j'essayais de t'aider à le faire fonctionner puisque
tu avais l'air de vouloir le faire.
Merci à toi. J'avais déjà essayé de bricoler avec un script de création
de vignettes et j'avais abandonné à cause des mêmes résultats (pages de
code, images introuvables ou contenant des erreurs)

Voici où j'en suis (les trois fichiers sont en ligne :

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DATE2: http://Autourdalos/html/date2.php
-----------------------------------------------------------------------
###### Code ######
<html>
<head>
<title>essaidate3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
header("Content-Type: image/gif");
$img='aaa.gif';
readfile($img);
?>
</body>
</html>
######Message obtenu de Ffx######

L'image “http://localhost/Autourdalos/html/date2.php” ne peut être
affichée car elle contient des erreurs.
######## code ########
image/gif remplacé par image/jpeg et $img=reçoit alos2.jpg

######## message d'erreur de Ffx############
http://localhost/Autourdalos/html/date3.php

Pour les deux, IE m'affiche le codage de la page en caractères non
reconnus par Thunderbird.
http//Autourdalos.fr/html/dates.php fonctionne !

##### un bout de code ##########
<?
$jour=date("D");
echo $jour ;
echo"-----------" ;
switch ($jour){
case "Mon":
echo "lundi";
$img='alos2.jpg';
break;
case "Tue":
echo"mardi";
$img="alos3.jpg";
break;
.....
}
echo '<img src="'.$img.'" />';
?>
-------------------------------
Je ne sais pas quelle est la différence entre .$img. et $img mais ça
change tout ! (je pensais plus aux " et ' )

Cordialement.
--
Alain L

Mon village en Haute Soule : http://autourdalos.fr
Carnet de voyages: http://autourdalos.fr/Randobal
Olivier Miakinen
2009-11-09 11:23:35 UTC
Permalink
Post by alainL
DATE2: http://Autourdalos/html/date2.php
Pfff... Je veux bien t'aider, mais même si tu ne comprends pas grand
chose tu pourrais au moins faire un effort et vérifier ce que tu mets
comme lien !

Lien corrigé : <http://autourdalos.fr/html/date2.php>.

Message d'erreur :
Warning: Cannot modify header information - headers already sent by
(output started at
/home/sites/autourdalos.fr/public_html/html/date2.php:8) in
/home/sites/autourdalos.fr/public_html/html/date2.php on line 9

Raison de l'erreur dans la FAQ (RTFM again) :
http://faqfclphp.free.fr/#rub2.12
Post by alainL
-----------------------------------------------------------------------
###### Code ######
<html>
<head>
<title>essaidate3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
header("Content-Type: image/gif");
$img='aaa.gif';
readfile($img);
?>
</body>
</html>
Euh... je peux rire ? Dis, je peux ? Bruno et moi te l'avons écrit dès
notre première réponse : soit ton code génère une image *et rien d'autre
qu'une image*, soit il envoie du texte, du code HTML ou quoi que ce soit.

Donc, tu nous vires tout ce code HTML, et tu gardes un fichier PHP de
cinq (5) lignes, pas une de plus, même pas une ligne vide :

-----------------------------------------------------------------------
<?php
header("Content-Type: image/gif");
$img='aaa.gif';
readfile($img);
?>
-----------------------------------------------------------------------
Post by alainL
######Message obtenu de Ffx######
L'image “http://localhost/Autourdalos/html/date2.php” ne peut être
affichée car elle contient des erreurs.
C'est bizarre que tu n'obtiennes pas le même message d'erreur que moi,
mais je vois quand même deux explications possibles :
- soit tu n'as pas exactement le même code en local et sur le site ;
- soit par config (.htaccess ou httpd.conf) le type mime envoyé avec
ta page est déjà celui d'une image.

Réessaye avec <http://autourdalos.fr/html/date2.php> (le Content-Type
envoyé avec cette page est "text/html").
Post by alainL
######## code ########
image/gif remplacé par image/jpeg et $img=reçoit alos2.jpg
######## message d'erreur de Ffx############
http://localhost/Autourdalos/html/date3.php
Idem.
Post by alainL
Pour les deux, IE m'affiche le codage de la page en caractères non
reconnus par Thunderbird.
Ben oui, une image c'est du binaire, pas du texte !
Post by alainL
http//Autourdalos.fr/html/dates.php fonctionne !
##### un bout de code ##########
<?
$jour=date("D");
echo $jour ;
echo"-----------" ;
switch ($jour){
echo "lundi";
$img='alos2.jpg';
break;
echo"mardi";
$img="alos3.jpg";
break;
.....
}
echo '<img src="'.$img.'" />';
?>
-------------------------------
Normal. Là c'est du HTML : c'est dans le HTML que tu choisis d'afficher
une image plutôt qu'une autre en changeant son URL ; tandis qu'avec
l'autre méthode, l'URL de l'image ne changera pas mais son contenu changera.
Post by alainL
Je ne sais pas quelle est la différence entre .$img. et $img mais ça
change tout ! (je pensais plus aux " et ' )
Euh... un petit cours des bases de PHP pourrait t'être utile, non ? Il
est vrai que quand on colle tous les opérateurs les uns aux autres ça
devient tout de suite moins lisible.

Allez, pour ne pas te laisser dans la mouise je te donne plusieurs
versions équivalentes(¹) du même code :

1)
echo '<img src="'.$img.'" />';

2)
echo '<img src="' . $img . '" />';

3)
echo '<img src="'
. $img
. '" />';
4)
echo '<img src="';
echo $img;
echo '" />';

Au cas où tu n'aurais pas encore compris, il s'agissait de l'opérateur
de concaténation des chaînes :
<http://www.php.net/manual/fr/language.operators.string.php>.

Note que je te conseille vivement de laisser des blancs autour des
opérateurs, et pas seulement pour le « . ».

Ainsi, au lieu de :
$jour=date("D");
tu devrais écrire :
$jour = date("D");

Et au lieu de :
echo"mardi";
ce serait bien plus lisible d'écrire :
echo "mardi";


(¹) Il y a aussi une version équivalente du point de vue du HTML, même
si le code généré est différent :
echo "<img src='$img' />";
Personnellement je trouve ça plus lisible, mais c'est une question de
point de vue (d'autres n'aiment pas).

Cordialement,
--
Olivier Miakinen
alainL
2009-11-09 14:11:43 UTC
Permalink
Olivier Miakinen a écrit :
............
Post by Olivier Miakinen
Lien corrigé : <http://autourdalos.fr/html/date2.php>.
Sorry. A force de faire des essais, je fais des copié-collé à grands
coups de ciseaux :-)
Post by Olivier Miakinen
Post by alainL
-----------------------------------------------------------------------
###### Code ######
<html>
<head>
<title>essaidate3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
header("Content-Type: image/gif");
$img='aaa.gif';
readfile($img);
?>
</body>
</html>
Euh... je peux rire ....
Rien avant <? php header............ et rien après ?>
j'avais oublié :-(
Donc ce procédé ne me permet pas d'insérer une image dans la page html
alors !
Post by Olivier Miakinen
Donc, tu nous vires tout ce code HTML, et tu gardes un fichier PHP de
Ca, tout nu, ça tourne en gif et en jpeg. OK

<?php header("Content-Type: image/gif");
$img='aaa.gif';
readfile($img);
?>
Post by Olivier Miakinen
Post by alainL
http://localhost/Autourdalos/html/date3.php
echo '<img src="'.$img.'" />';
?>
.......... "." il s'agissait de l'opérateur
CQFD !

Merci. Et si je t'ai fait rire en ce jour triste et pluvieux, j'en suis
heureux :-)

Cordialement,
--
Alain L

Mon village en Haute Soule : http://autourdalos.fr
Carnet de voyages: http://autourdalos.fr/Randobal
Olivier Miakinen
2009-11-09 15:39:32 UTC
Permalink
Post by alainL
Post by Olivier Miakinen
Lien corrigé : <http://autourdalos.fr/html/date2.php>.
Sorry. A force de faire des essais, je fais des copié-collé à grands
coups de ciseaux :-)
Je ne sais pas si tu t'en es rendu compte, mais c'est ce que je te
reproche régulièrement en te répondant « RTFM » une fois sur deux.
Plutôt que de faire des essais un peu au hasard, tu gagnerais énormément
de temps en lisant un peu plus à fond aussi bien la doc que des exemples
qui marchent (il y en a beaucoup dans les commentaires qui suivent
chaque page de doc sur www.php.net).
Post by alainL
Rien avant <? php header............ et rien après ?>
j'avais oublié :-(
Donc ce procédé ne me permet pas d'insérer une image dans la page html
alors !
Ce que permet ce procédé, c'est d'avoir l'image qui change sans rien
toucher à la page HTML (qui peut être statique) :

Dans page.html :
<img src='image.php' alt='...'>

Dans image.php :
switch($date)
... choix de l'image
readfile($image);


Mais bien sûr l'inverse est plus simple, et qui plus est la gestion du
cache des images est alors faite par le serveur sans que tu aies à t'en
préoccuper :

Dans page.php :
switch($date)
... choix de l'image
echo "<img src='$image' alt='...'>";


Cordialement,
--
Olivier Miakinen
Continuer la lecture sur narkive:
Loading...