297-image1-fr1243158332.jpg

PHP : forcer le telechargement d’un fichier

Forcer le téléchargement d’un fichier via PHP vous permet de proposer à l’internaute de télécharger (downloader) un fichier sur son ordinateur au lieu de l’ouvrir via son navigateur (vous pouvez par exemple proposer à l’internaute de télécharger une image haute définition plutôt que de l’ouvrir directement dans son navigateur).
 
Ma fonction telechargerFichier(); permet de forcer le téléchargement de n’importe quel type de fichiers sur le serveur via PHP : txt, jpg, gif, png, php, zip, gz, html, CSV (Excel)… Cette fonction prends 2 arguments en paramètre :
 
  • $cheminTotal : chemin physique du fichier à partir de la racine du serveur
  • $fichierFauxNomSansExtension : nom sous lequel le fichier sera téléchargé sur l’ordinateur de l’internaute (ce nom n’est pas obligé d’être celui sur le serveur)
  • $extension : c’est l’extension du fichier sans le point (ex : ‘csv’, ‘txt’, ‘zip’…)
 
Exemple d’utilisation :
Dans notre exemple, nous allons forcer le téléchargement d’un simple fichier texte "txt" contenant une liste d’adresses e-mails.
 
<?
$cheminTotal = $_SERVER[‘DOCUMENT_ROOT’]."/adresseEmail.txt"; // le fichier ‘adresseEmail.txt’ se trouve à la racine du site.
$fichierFauxNomSansExtension = "adresses-emails"; // nom que le fichier aura une fois téléchargé sur l’ordinateur de l’internaute.
$extension = "txt";
telechargerFichier($cheminTotal, $fichierFauxNomSansExtension, $extension);
?>
 
IMPORTANT :
Pour que le téléchargement fonctionne, il est indispensable de n’afficher aucun flux avant l’appel de la fonction ! Donc si vous souhaitez proposer le téléchargement via un lien, vous devez ouvrir le lien dans une nouvelle fenêtre qui appelera la fonction, puis fermer cette fenêtre via JavaScript.
 
Voici le code PHP de la fonction :
 
<?
function telechargerFichier($cheminTotal, $fichierFauxNomSansExtension, $extension){
$fichierFauxNomAvecExtension = $fichierFauxNomSansExtension.".".$extension;
switch($extension) {
case "gif": $type = "image/gif"; break;
case "gz": $type = "application/x-gzip"; break;
case "jpg": $type = "image/jpeg"; break;
case "htm": $type = "text/html"; break;
case "html": $type = "text/html"; break;
case "pdf": $type = "application/pdf"; break;
case "png": $type = "image/png"; break;
case "tgz": $type = "application/x-gzip"; break;
case "txt": $type = "text/plain"; break;
case "zip": $type = "application/zip"; break;
default: $type = "application/octet-stream"; break;
}
header("Content-disposition: attachment; filename=$fichierFauxNomAvecExtension");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $typen");
header("Content-Length: ".filesize($cheminTotal));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($cheminTotal);
}
?>

Auteur : Fabien Branchut

Fabien Branchut
Concepteur de site web depuis 2001 : développement web et SEO. Co-fondateur et directeur web de l'agence Studio Vitamine depuis 2008 : conception e-commerce, chef de projet, stratégie SEO. Site de Fabien Branchut.

Commentaires Facebook

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *