18mar/084
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 (4)
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!!!
++