Dans une galerie, il peut être intéressant de placer un lien permettant le téléchargement d'une photo haute-résolution. Si l'on fait un simple lien :

<a href="./images_xbig.jpg">Télécharger</a>


La photo s'affiche directement dans le browser. Pour ouvrir une petite boite de dialogue autorisant soit l'ouverture avec son programme préféré, soit l'enregistrement, il semble que l'on doive utiliser la fonction header(). J'ai trouvé pas mal de tuto sur le web, mais soit ils ne fonctionnent pas, soit ils sombrent dans des détails techniques hors de (ma) portée (e.g. renvoie vers la RFC2616). Je vous propose donc une solution ne comportant que les instructions que je pense avoir comprises et commentées.

1) Créer un fichier download.php avec le code suivant :
//La ligne ci-dessous est à ajouter si la page commence par "session_start()", afin qu'IE fonctionne correctement
//header('Cache-Control: public')

//Avec Firefox, si l'on utilise "application/octet-stream" le choix par défaut est "enregistrer" au lieu de "ouvrir" et la case " toujours effectuer cette action..." est grisée.
//Si l'on utilise "image/jpeg" le choix par défaut sera "ouvrir"
header('Content-Type: application/octet-stream');

//Pour IE, "attachment" indique que filename sera téléchargé, contrairement à "inline" qui signifierait que filename sera lu par le browser (valeur par défaut pour IE)
//Le filename n'a qu'une valeur "indicative" (valeur affichée dans la boite "save as")
//son extension, par contre, est importante car  elle permet au browser de définir le type de fichier (et choisir le bon programme)
header('Content-Disposition: attachment; filename='.$_GET['dl'].';');

//Sous IE, la ligne ci-dessous permet d'afficher la taille du fichier à coté de son nom (pas d'effet sous Firefox ?)
header('Content-Length: '.filesize($_GET['chemin'].$_GET['dl']));

// C'est la lecture du fichier qui va envoyer son contenu dans le flux courant
readfile($_GET['chemin'].$_GET['dl']);


2) Dans son code HTML il suffit de créer le lien suivant :

<a href="./download.php?dl=image_xbig.jpg&chemin=./">Télécharger</a>


Bon j'avoue avoir procéder de façon purement empirique Smiley confused mais il y a peut-être là une idée de tuto à développer ou un thread de discussion à alimenter.

Cdlt
Modifié par Merlin (12 May 2008 - 16:43)