Hello,
J'ai actuellement un petit problème avec un script de gestion d'image en PHP. L'idée est d'associer un avatar à chaque utilisateur du site (rien de nouveau). L'image est enregistrée dans un champ de type "longblob" de la base de donnée MySQL associée (pourquoi dans la BD et non dans un fichier? simplement pour éviter que si par hasard l'identificateur de l'utilisateur change, l'image soit ensuite invalide).
L'enregistrement de l'image se fait sans problème. Mon script qui renvoie l'image ressemble à :
Ce simple code, si l'image est appelée depuis un code HTML, donne un affichage correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $image = // recherche dans la base de données du champ de type longblob echo $image;
Afin de permettre aux gens de faire clic droit sur l'image -> "Afficher l'image", j'ai modifié mon code comme suit :
Cette façon de faire marche très bien pour un affichage dans le navigateur (que l'image soit d'ailleurs ou non en format JPG, mais là n'est pas le débat).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $image = // recherche dans la base de données du champ de type longblob header('Content-type: image/jpeg'); echo $image;
L'étape suivante est de permettre aux utilisateurs de pouvoir télécharger l'image par un clic droit -> "Enregistrer l'image sous...". Par contre, cette fonctionnalité ne marche pas avec le code que j'ai mis juste au dessus si le cache est désactivé (ça marche si le cache du browser est activé). Le fichier téléchargé est un fichier d'image, correct d'ailleurs, mais qui porte le nom de mon script PHP (et une extension .PHP, ce qui est génant).
C'est un peu génant pour l'utilisateur de devoir modifier l'extension d'un fichier .PHP en .JPG pour pouvoir ensuite visualiser en local l'image (et la plupart des utilisateurs ne penseraient d'ailleurs pas à le faire, ce qui est tout à fait normal).
php.net propose un morceau de code ressemblant à :
La RFC concernant le header Content-Disposition précise qu'il s'agit d'une directive normalement destinées aux logiciels de mails. Toutefois, l'exemple de code de php.net précise que ça devrait forcer le browser à télécharger cette image comme fichier .JPG avec le nom indiqué (l'exemple est donné avec un .pdf, mais je pense que ça ne devrait rien changer).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 header('Content-type: image/jpeg;'); // This should work for IE & Opera header("Content-type: image/jpeg"); // This should work for the rest header('Content-Disposition: attachment; filename="photouser'.$id_utilisateur.'"'); echo $image;
Voilà, j'ai plus trop d'idée pour permettre aux utilisateurs de télécharger l'image, lorsque leur cache browser est désactivé, et en ayant bien un fichier .jpg.
Si vous arrivez à m'aider, je vous en remercie grandement
Sinon, je crois que je vais mettre tout sur le disque et oublier les 3 h de lecture de RFC que je viens de passer
Merci d'avance
Partager