• PHP > forcer le téléchargement d’un fichier

      Pour que le script fonctionne il ne faut pas d’instruction qui affiche quelques choses à l’écran avant les lignes header.

       

      Sinon vous obtiendrez un message du style :
      » Warning : Cannot modify header information – headers already sent by (output started at d:\creation\easyphp\www\_test\test.php:2) in d:\creation\easyphp\www\_test\test.php on line 3″


      Par exemple créer un fichier  » telecharger.php » avec comme contenu :

       

      <?php
      // on essaie de reconnaitre l'extension pour que le téléchargement
      corresponde au type de fichier afin d'éviter les erreurs de corruptions
      switch(strrchr(basename($Fichier_a_telecharger), ".")) {
      case ".gz": $type = "application/x-gzip"; break;
      case ".tgz": $type = "application/x-gzip"; break;
      case ".zip": $type = "application/zip"; break;
      case ".pdf": $type = "application/pdf"; break;
      case ".png": $type = "image/png"; break;
      case ".gif": $type = "image/gif"; break;
      case ".jpg": $type = "image/jpeg"; break;
      case ".txt": $type = "text/plain"; break;
      case ".htm": $type = "text/html"; break;
      case ".html": $type = "text/html"; break;
      default: $type = "application/octet-stream"; break;
      }
      header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
      header("Content-Type: application/force-download");
      header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
      header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
      header("Pragma: no-cache");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
      header("Expires: 0");
      readfile($chemin . $Fichier_a_telecharger);
      ?>

      Ensuite faire un fichier test.php ou test.html suivant ses préférences.

      On appelle le fichier telecharger.php en passant en paramètre le nom du fichier à télécharger ainsi que le chemin.

       

      <html>
      <head>
      <title>Forcer le téléchargement d'un fichier</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      </head>
      <body>
      <?php
      // Test du téléchargement d'un fichier avec reconnaissance du type de fichier
      echo "<a href=\"telecharger.php?Fichier_a_telecharger=monfichier.txt&chemin=test/\">Télécharger</a>";
      ?>
      </body>
      </html>
      <span>Ou simplement si l'on ne veut utiliser que du html </span>
      <html>
      <head>
      <title>Test du téléchargement d'un fichier</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      </head>
      <body>
      <a href="telecharger.php?Fichier_a_telecharger=monfichier.txt&chemin=test/">Télécharger</a>
      </body>
      </html>

       

 

Aucun commentaire

 

Laissez un commentaire