We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2327
    • 214 Posts
    Bj,

    Existe-il un script qui permette, par simple clic sur une balise href pointant sur un PDF, d’ouvrir la fenêtre "enregistrer sous" du navigateur ?

    Je ne trouve pas de solution html stricte..., sauf à faire un fichier zip à la place du PDF, mais voilà qui oblige l’utilisateur à le décompresser après chargement.... undecided
      • 10449
      • 956 Posts
      Tu simplement fait un link via une page .php (p.ex. download.php?fichier=foo.pdf) avec un header spécial:

      <?php
      header('Content-type: application/pdf');
      header('Content-Disposition: attachment; filename="downloaded.pdf"');
      readfile('original.pdf');
      ?>
      


      pour faire ça plus secours, tu devrait vérifier si le file existe, et restricter le target directory etc.

      au lieu de header(’Content-type: application/pdf’); tu peux aussi utiliser header("Content-Type: application/octet-stream");
        • 2327
        • 214 Posts
        Merci bp... grin

        Mais je n’ai pas tout compris pour la restriction du target que tu indiques pour raison de sécurité.

        D’autre part, cette méthode n’a-t-elle pas pour effet d’ouvrir le reader pdf ?

          • 10449
          • 956 Posts
          Excuse my terrible French :|

          On devrait être sûr que le fichier existe vraiment, et qu’un hacker ne peut pas télécharger une page comme .htaccess ou config.inc.php simplement par changer un parametre.

          Voilà quelque chose qui marche ici (0.9.6 / LAMP):

          unset($fn);
          unset($url);
          unset($folder);
          if($_GET['f']) {
          $fn = trim($_GET['f']);
          $fn = str_replace("/", "", $fn);
          $fn = str_replace("http", "", $fn);
          $fn = str_replace("..", "", $fn);
          $fn = str_replace(".htaccess", "", $fn);
          $fn = str_replace("passw", "", $fn);
          $fn = str_replace(".php", "", $fn);
          $fn = str_replace(".ini", "", $fn);
          $fn = str_replace(".inc", "", $fn);
          $folder = 'assets/files/';
          $url = MODX_BASE_PATH . "$folder$fn";
          if(file_exists($url)) {
          header("Accept-Ranges: bytes");
          header("Cache-control: private");
          header("Pragma: no-cache");
          header("Expires: 0");
          header("Content-Type: application/octet-stream");
          header("Content-Disposition: attachment; filename=$fn");
          header("Content-Transfer-Encoding: binary");
          $x = file_get_contents($url);
          echo $x;
          exit();
          }
          }
          
          



          tu mets ça dans un snippet, disons dans un doc avec id 100.
          Ce doc n’a aucun template ("blank") et aucun text autre que le snippet call: [!download!]

          un link sera donc comme ça: index.php?id=100&f=document.pdf