Voici comment forcer le téléchargement d’un fichier en PHP.
Pour que le script fonctionne, il ne faut pas d’instruction qui affiche quelque chose à 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//Nous essayons de reconnaitre l’extension pour que le téléchargement corresponde au type de
// fichier. Cela permet 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. Exemple :
<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>
Ou simplement si l'on ne veut utiliser que du HTML.
<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>