Afficher une image avec header(..jpeg) et readfile en php
Bonjour,
Je voudrais afficher une image seulement à certains utilisateurs.
Lorsqu'un internaute pense être redirigé vers http://www.monsite.com/images/image.jpg, un .htaccess redirige en fait vers un fichier php images.php à la racine de mon site.
Dans ce fichier images.php, je récupère le user en session, je regarde s'il a bien le droit de visualiser l'image et si :
- Il n'a pas le droit, je renvoie une page 404
- Il a le droit, je lui affiche l'image en modifiant le header.
Pour modifier le header et afficher l'image, je fais comme suit :
Code:
1 2 3
| $path = 'path/to/myimage.jpg';
header('Content-Type: image/jpeg');
readfile($path); |
J'ai bien vérifié l'existence du fichier (file_exists), ses dimensions (getimagesize) et sa taille (filesize), tout est ok à ce niveau.
Lorsque je retire la ligne header('Content-Type: image/jpeg');, je récupère bien le fichier mais non sous format jpeg.
Dès que j'ajoute le header, j'obtiens l'erreur suivante, sous forme d'image :
L'image "http://127.0.0.1/images/image.jpg" ne peut être affichée car elle contient des erreurs.
J'ai beau parcourir le net à la recherche d'une solution, tout le monde arrive à afficher une image avec ce bout de script ... :/
Ce qui est bizarre c'est que le header a l'air de fonctionner (j'ai bien une image en sortie, mais sous forme de texte d'erreur) et que readfile a l'air de bien lire l'image.
J'ai aussi essayé avec d'autres images jpg que mon image de test ainsi qu'avec un png mais c'est la mm chose :cry:
Merci de votre aide !
l'image ne peut être affichée car elle contient des erreurs
Je me permet de soumettre ici mon problème car il me semble être assez semblable à celui de yuukuari.
Voici deux versions d'un petit programme allant chercher uene image dans une BDD postgres. Ils ne diffèrent que par la ligne en rouge :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php header('Content-type:image/jpeg');
$image_oid = 219109;
$pgconn = "host=localhost port=5432 dbname=images user=.. password=..";
$database = pg_connect($pgconn);
pg_query($database, "begin");
$handle = pg_lo_open($database, $image_oid, "r");
pg_lo_read_all($handle);
pg_query($database, "commit");
?>
<?php header('Content-type:image/jpeg');
$image_oid = $_GET('OID');
$pgconn = "host=localhost port=5432 dbname=images user=.. password=..";
$database = pg_connect($pgconn);
pg_query($database, "begin");
$handle = pg_lo_open($database, $image_oid, "r");
pg_lo_read_all($handle);
pg_query($database, "commit");
?> |
La première me renvoie l'image correctement
La deuxième affiche:
l'image ne peut être affichée car elle contient des erreurs
Qu'est-ce qui cloche Docteur ???
Merci!