18mar/089
Forcer le téléchargement d'un fichier avec PHP
Dance cet article nous allons voir comment forcer le navigateur à télécharger un fichier (n'importe lequel) au lieux de l'ouvrir. Pour cela nous allons utiliser les Headers qu'envoie le serveur au navigateur (fonction header de php).
Voici le code a utiliser :
//date actuelle $date = gmdate('D, d M Y H:i:s'); header("Content-Type: text/xml"); //Ici par exemple c'est pour un fichier XML, a changer en fonction du type mime du fichier voulu. header('Content-Disposition: attachment; filename=NOM_FICHIER.xml'); header('Last-Modified: '. $date . ' GMT'); header('Expires: ' . $date); //header specifique IE :s parce que sinon il aime pas if(preg_match('/msie|(microsoft internet explorer)/i', $_SERVER['HTTP_USER_AGENT'])){ header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); }else{ header('Pragma: no-cache'); } echo $CONTENU_DE_NOTRE_FICHIER; // ou readfile('CHEMIN_FICHIER'); En fonction du type de fichier. |
Le type Mime doit être celui du fichier qu'on veut pouvoir télécharger (liste des types mime disponibles). En voici quelques exemples :
image GIF : image/gif fichier XML : text/xml fichier rtf : application/rtf fichier avi : video/msvideo |
Maintenant à vos fichiers dl.php
Commentaires (9)
Trackbacks (0)
(Souscrire aux commentaires de cet article)
Aucun trackbacks pour l'instant
23 avril 2008
Fonctionne vraiment bien merci
1 novembre 2008
Très intéressant, merci beaucoup.
5 novembre 2008
Merci!
Je cherchais depuis un moment comment faire pour que cela marche sous IE!
27 mai 2010
Merci beaucoup pour ce petit script qui marche impecable, moi aussi j’ai eu du mal avec ie!!
Petit plus pour la sécurité: une condition qui empêche de prendre n’importe quel extension:
if(ereg(« .pdf »,$fichier){…}
Remplacer « .pdf » par l’extension que vous souhaitez mettre en téléchargement, « $fichier » la var qui contient le nom du fichier.
Bon ereg() est deprecated mais ca marche!!!
++
24 novembre 2010
Bonjour,
J’ai lu votre rubrique de téléchargement avec script PHP. J’aimerais télécharger un fichier ‘Virtuel.exe’ situé dans ‘http://jacques.dupont.free.fr‘ soit: http://jacques.dupont.free.be/Virtuel.exe (mon site web)
Je n ai aucune connaissance particulière en PHP, comment dois-je adapter ce script pour le téléchargement de ce fichier ‘Virtuel.exe’.
J’ai essayé de l adapter, mais sans aucun résultat….
Je vous remercie beaucoup,
Phy
25 novembre 2010
Bonjour,
normalement pour le .exe il n’y rien a faire, il suffit d’appeler l’url exacte du fichier (.exe) et il sera proposé au téléchargement automatiquement.
la solution proposée sur ce billet est valable pour des fichiers texte (donc lisibles directement sur le navigateur), des images, etc. où parfois on aimerait que le navigateur les propose au téléchargement au lieux de les ouvrir directement.
Cordialement,
14 février 2011
Super ce script!
Juste un soucis de mon côté : il s’agit d’un xml que je veux ouvrir avec excel.
J’enregistre puis ça ne marche pas à cause d’un espace qui est ajouté à mon xml de départ.
il n’y a pas d’espace.
Par le site, il y en a un.
Peut-être pourrais tu m’aider?
Cordialement,
Anthony.
14 février 2011
bonjour,
essaye avec readfile(‘CHEMIN_FICHIER’); ça évite de transformer le fichier en string avant de l’envoyer au navigateur.
8 avril 2011
J’ai eu le même problème (les espaces avant) même en utilisant le readfile
Il faut mettre ca avant le readfile
ob_clean();
flush();
Et ca marche!!!