Forcer le téléchargement des liens PDF

Rien n’est plus agaçant que de lancer l’ouverture d’un fichier PDF en cliquant sur un lien dans une page web… d’autant plus désagréable lorsque le fichier en question est lourd, ce qui est souvent le cas pour ce type de fichiers (catalogues ou manuels par exemples)
Or c’est pourtant l’action par défaut que proposent la plupart des navigateurs…
. Il existe une solution simple pour forcer le téléchargement :
Cliquez ici pour voir un exemple sans forcer le téléchargement
Cliquez ici pour voir un exemple en forçant le téléchargement
Première étape :
mettre dans le même dossier que le fichier PDF (test.pdf pour l’exemple) un fichier PHP intitulé : telecharge.php :
<?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=$_GET[pdf]");
readfile($_GET['pdf']);
?>
Deuxième étape :
Sur la page web concernée, créer le lien de téléchargement du PDF test.pdf ainsi :
<a href="../pdf/telecharge.php?pdf=test.pdf">télécharger test.pdf</a>
Et voilà… c’est tout



Merci, c’est cool
Salut,
Voilà une astuce intéressante, je vois que je ne suis pas le seul à maudire la lecture de pdf dans les navigateurs :biggrin:
Merci
bonjour, j’ai essayer d’adapter votre code à mon script, mais ça ne marche tjrs pas!! j’ai crée le fichier telecherger.pdf et dans ma page php j’ai mis:
(‘point’)
$dir = opendir($dir_nom) or die(‘Erreur de listage : le répertoire n\’existe pas’); // on ouvre le contenu du dossier courant
$ifichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
while($element = readdir($dir)) {
if($element != ‘.’ && $element != ‘..’ && $element != ‘index.php’) {
if (!is_dir($dir_nom.’/’.$element)) {$fichier[] = $element;}
else {$dossier[] = $element;}
}
}
closedir($dir);
$hide = Array(‘.’,’..’);
if(!empty($dossier)) {
rsort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
echo « Voici les dossiers accessibles de la ‘$dir_nom’ : \n\n« ;
echo « \t\t\n »;
foreach($dossier as $lien){
if(in_array($lien, $hide))
continue;
echo « \t\t\t$lien\n »;
}
//echo « \t\t »;
}
/*if(!empty($fichier)){
sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
echo « Liste des divers fichiers en hebergement temporaire: \n\n »;
echo « \t\t\n »;
foreach($fichier as $lien) {
echo »
\t\t\t$lien\n
Vide
« ;
echo filesize(image.’/’.$lien);
echo »
Telecharger« ;
}
echo « \t\t »;
}
*/
/*if(!empty($fichier)){
sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
echo « Voici les fichiers accessibles de la ‘$dir_nom’ : \n\n« ;
echo « \t\t\n »;
foreach($fichier as $lien) {
echo « \t\t\t$lien\n »;
}
echo « \t\t »;
}*/
?>
télécharger arbre.pdf
svp , st ce que vous pouvez m’aider à confuser ces deux script pour qu’il marche, merci d’avance
C’est difficile à dire sans le reste du code.
Il doit y avoir une erreur PHP quelque part… Si les messages d’erreur ne s’affichent pas sur ton site, met un fichier .htaccess pour les afficher (voir ici : http://www.webtolosa.com/2007/12/09/debuguer-un-site-en-php-avec-un-htaccess/)
Qu’est ce que tu obtiens comme message d’erreur ?
salut
merci pour l’astuce, très simple à mettre en place. :biggrin:
bye
Merci pour l’astuce
C’est simple mais encore faut-il y penser :biggrin:
+++
Merci,
Depuis quelques jour j’étais confronter aux aberrations des navigateurs lors de demande de téléchargement (http) de .pdf et enfin, la solution.
Merci.
merci bien,
après avoir essayé différents scripts php plus compliqués les uns que les autres et qui me donnaient, au mieux, un pdf corrompu, enfin un tout simple et qui fonctionne xD
cela dit, en cherchant je suis souvent tombé sur des mises en garde concernant la possibilité de hacker par le biais d’un téléchargement forcé (télécharger d’autres fichiers avec les connexion bdd par ex), est-ce que celui ci est sûr ? que peut-on lui ajouter pour renforcer la sécurité ??
Bonjour Daniel,
il n’y a pas de scripts sans risques … mais celui-ci me semble nettement moins dangereux que n’importe quel formulaire de base. Regarde cet article : http://goo.gl/EeXqB, tu y trouveras 90% des failles exploitées par 90% des hackers. Ça devrait suffire à sécuriser tes sites, à moins que tu ne développes pour le pentagone …!
merci de la précision et article très intéressant.
J’ai essayé, connais le html et le css mais rien en php, suivi les consignes et ça marche impec !
Merci !
Bonjour,
Merci pour cette astuce simple (que j’ai mis un peu de temps à comprendre quand même j’avoue). Tu m’as épargné bien des recherches sur internet pour forcer un téléchargement et maintenant mon site est un cran plus pro ^^. Merci!
MERCI!!!!!!!
!
bon sang c’était pas compliqué ça fais 2h que je cherche ça
encore merci