Naeh.net Le mémo du développeur

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)
  1. Fonctionne vraiment bien merci ;)

  2. Très intéressant, merci beaucoup.

  3. Merci!
    Je cherchais depuis un moment comment faire pour que cela marche sous IE!

  4. 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!!!
    ++


Laisser un commentaire


Security Code:

Aucun trackbacks pour l'instant