Forcer un fichier à être téléchargé?

@ybee

Membre expert
Club iGen
18 Mai 2001
1 039
14
42
Embourg, Belgique
antoine.olbrechts.eu
Hello!


Je ne trouve pas ce que je veux sur le web, si jamais quelqu'un sait m'éclairer...
Je cherche comment faire pour forcer un fichier à être downloadé lorsqu'on clique sur un lien. En fait, un script PHP va générer un fichier .csv ou .tab pour être ensuite importé dans FileMaker.

Pour le moment, si on clique sur le lien, la contenu du fichier CSV (ou TAB) est affiché dans le navigateur. J'aimerais qu'il soit téléchargé directement plutôt que devoir faire un clic droit dessus ou quoi...

Une piste?


Merciiiiiiiiiiiii :D !!
 
un truc du genre par exemple :
Bloc de code:
<?php 
// infos du fichier 
$fichier = 'mes_fichiers/monimage.jpg'; 
$nom_fichier = 'monimage.jgp'; 

switch(strrchr(basename($nom_fichier), ".")) {
  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;
              }

// t&#233;l&#233;chargement du fichier 
header('Content-disposition: attachment; filename='.$nom_fichier); 
header('Content-Type: application/force-download'); 
header("Content-Transfer-Encoding: $type\n");

/*header('Content-Transfer-Encoding: fichier');  /*cette ligne peut suffir dans certains hebergeurs &#224; la place du boxon de $type, mais peut cr&#233;er des fichiers corrompus! */

header('Content-Length: '.filesize($fichier)); 
header('Pragma: no-cache'); 
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0   public'); 
header('Expires: 0'); 
readfile($fichier); 
?>
et voili
 
jeanba3000 a dit:

pour le zipper tu es obligé d'utiliser une library (elle est contenu dans phpmyadmin) zip.lib.php

C'est surtout pratique que tu force le download de plusieurs fichier par exemple
tu peux creer une fonction en fonction de ta requete SQL
Bloc de code:
function dl_zip ($listing,$n) {

        // creation d'un .zip
                include("zip.lib.php"); //appel à librairie de phpmyadmin
                $zip = new zipfile(); // creaation d'un document zip vide

        for ($i=0;$i<$n; $i++) {//boucle de telechargement


                $filename = $listing[$i]; // determination du fichier
                $fp = fopen($filename, "r"); //ouverture du fichier
                $contenu = fread($fp, filesize($filename)); //lecture du contenu du fichier
                fclose($fp);//fermeture du fichier

                $zip -> addfile($contenu,$filename); //ajout du fichier dans l'archive

                $taille = $taille + filesize($filename);
                
    }//fin de la boucle de telechargement
            
    //forcer le telechargement du fichier
            @header("Content-Description: File Transfer");
            @header("Content-type: application/octect-stream");
            @header("Content-Disposition: attachement; filename=archive.zip");
            @header("Content-Length: ".$taille); 

        flush();
       print $zip -> file();

}

si c'est juste pour un seul fichier la méthode si dessus est LARGEMENT suffisante