Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

comment afficher $img ?

1 view
Skip to first unread message

alainL

unread,
Nov 7, 2009, 3:21:05 PM11/7/09
to
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

Olivier Miakinen

unread,
Nov 8, 2009, 4:36:16 AM11/8/09
to
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=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

Bruno Desthuilliers

unread,
Nov 8, 2009, 4:36:16 AM11/8/09
to
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=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" />';
> ?>


Si tu mets un content-type image/gif, il faut retourner un gif, pas du
html (ou aucun autre format texte).

alainL

unread,
Nov 8, 2009, 10:58:30 AM11/8/09
to
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 ! 1 AQa "q 2 ‘¡±B#$ RÁb34r‚..."

- Pareil avec image/gif et image.gif.

Olivier Miakinen

unread,
Nov 8, 2009, 11:10:36 AM11/8/09
to
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

alainL

unread,
Nov 8, 2009, 3:49:17 PM11/8/09
to
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=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

Olivier Miakinen

unread,
Nov 8, 2009, 6:19:00 PM11/8/09
to
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=acacia01.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

alainL

unread,
Nov 9, 2009, 5:42:10 AM11/9/09
to
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=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

Olivier Miakinen

unread,
Nov 9, 2009, 6:23:35 AM11/9/09
to
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=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.'" />';
> ?>
> -------------------------------

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

unread,
Nov 9, 2009, 9:11:43 AM11/9/09
to
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,

Olivier Miakinen

unread,
Nov 9, 2009, 10:39:32 AM11/9/09
to
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

0 new messages