picture
février 4, 2010 PHP 13 Commentaires

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 :)

13 Responses to “Forcer le téléchargement des liens PDF”

13 Commentaires

  1. dada dit :

    Merci, c’est cool :cool:

  2. Capcorne dit :

    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

  3. nounou dit :

    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 :sad:

  4. webtolosa dit :

    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 ?

  5. mehdi dit :

    salut

    merci pour l’astuce, très simple à mettre en place. :biggrin:

    bye

  6. Bastos dit :

    Merci pour l’astuce :smile:

    C’est simple mais encore faut-il y penser :biggrin:

    +++

  7. Gérald dit :

    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.

  8. Misterdan dit :

    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é ??

  9. webtolosa dit :

    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 …!

  10. Misterdan dit :

    merci de la précision et article très intéressant.

  11. Ed dit :

    J’ai essayé, connais le html et le css mais rien en php, suivi les consignes et ça marche impec !
    Merci !

  12. Roy dit :

    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!

  13. MERCI dit :

    MERCI!!!!!!!
    bon sang c’était pas compliqué ça fais 2h que je cherche ça :evil: !

    encore merci :D

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: