Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment afficher $img ?

10 réponses
Avatar
alainL
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

10 réponses

Avatar
Olivier Miakinen
Le 07/11/2009 21:21, alainL a écrit :

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 !



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 !

(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).

Merci pour vos conseils !



À priori, je pencherais pour :

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

$jourÚte("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
Avatar
Bruno Desthuilliers
alainL a écrit :
(snip)
<<L'image "http://localhost/essais/dates.php" ne peut être affichée car
elle contient des erreurs.>>

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

$jourÚte("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" />';
?>




Si tu mets un content-type image/gif, il faut retourner un gif, pas du
html (ou aucun autre format texte).
Avatar
alainL
Olivier Miakinen a écrit :
Le 07/11/2009 21:21, alainL a écrit :
J'essaie d'afficher une image en fonction du jour. Le jour s'affiche
mais pour l'image, j'obtiens le message suivant :





.................

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,



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
Avatar
Olivier Miakinen
Le 08/11/2009 16:58, alainL m'a répondu :

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





Ok.

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]
[...]
</>

- 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
Avatar
alainL
Olivier Miakinen a écrit :
Le 08/11/2009 16:58, alainL m'a répondu :
header("Content-Type: image/gif");





Ok.

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]
[...]
</>




????? même avec la traduction je ne sais pas quoi faire de ce RFC2045 :-(


- 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¬acia01.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
Avatar
Olivier Miakinen
Le 08/11/2009 21:49, alainL a écrit :

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.

Même comportement avec Content-type : image/jpg et $img¬acia01.jpg



C'est donc normal, ou du moins pas surprenant.

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 ?

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.

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',


^
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.

);
$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
Avatar
alainL
Olivier Miakinen a écrit :
........

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


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Úte("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
Avatar
Olivier Miakinen
Le 09/11/2009 11:42, alainL a écrit :

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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

-----------------------------------------------------------------------
###### 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);
?>
-----------------------------------------------------------------------

######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").

######## 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.

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 !

http//Autourdalos.fr/html/dates.php fonctionne !

##### un bout de code ##########
<?
$jourÚte("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.'" />';
?>
-------------------------------



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.

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Úte("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
Avatar
alainL
Olivier Miakinen a écrit :
............

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



Sorry. A force de faire des essais, je fais des copié-collé à grands
coups de ciseaux :-)

-----------------------------------------------------------------------
###### 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 !




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 :



Ca, tout nu, ça tourne en gif et en jpeg. OK

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


http://localhost/Autourdalos/html/date3.php





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


.......... "." il s'agissait de l'opérateur
de concaténation des chaînes :



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
Avatar
Olivier Miakinen
Le 09/11/2009 15:11, alainL a écrit :

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).


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