CrazyCat Programming Factory
rendre internet plus accessible
 

Forcer le téléchargement d'un fichier

Logo phpLorsqu'on veut permettre le téléchargement d'un fichier depuis un site internet, il y a un problème avec les types connus (.txt, .pdf, .doc, .xls, ...) qui ont la facheuse tendance à s'ouvrir dans le navigateur.
Ce petit morceau de script permet de forcer le téléchargement, ce qui peut être fort utile.
<?
$fichier = 'repertoire/fichier.ext';

// Nous extrayons les informations grâce à $fichier
$fichier_nom = basename($fichier);
$fichier_taille = filesize($fichier);
$fichier_mime = mime_content_type($fichier);
     
// téléchargement du fichier
header("Content-disposition: attachment; filename=".$fichier_nom);
header("Content-Type: $fichier_mime");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fichier_taille);
header("Pragma: no-cache, public");
header("Cache-Control: public, no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
readfile($fichier);
?>
N.B. Le bon fonctionnement de ce script est dépendant du navigateur et de son respect des normes.
En ce qui concerne mime_content_type, vous pouvez vous rapporter à l'astuce Retrouver le type mime
Ce système peut être utilisé en tant que fonction, ce qui est plus pratique:
function sendfile($url,$named,$size) {
    $mime = mime_content_type($url);
    header("Pragma: no-cache, public");
    header("Expires: 0");
    header("Cache-Control: public, no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    header("Content-type: ".$mime);
    if ($size != 0) {
        header("Content-Length: ".$size);
    }
    header("Content-Disposition: attachment; filename=\"".$named."\"");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    header("Location: ".$url);
}

©2006-2019 Geek Zone | eggdrop.fr | zeolia.net