phpforce-download

How do I force-download different .pdfs in same script?


I have a webpage with 3 links.

When someone clicks on the link it redirected them to redirect.php and force-downloads the respective .pdf. Why is it that, all 3 links force-download the same .pdf file? How do I make it so each link downloads a different .pdf file?


Solution

  • You could read out the value of the paramter of the _GET Variable "dl" with $_GET['dl'].

    <?php
    if (isset($_GET['dl'])) {
      switch ($_GET['dl']) {
        // whitelist of downloadable files
        case  "mypdf1.pdf": 
        case  "mypdf2.pdf": 
        case  "mypdf3.pdf": 
          $file = basename($_GET['dl']);
        default: 
          die("no such file");
      }
    } else {
      die("bad request");
    }
    
    // provide file  
    header('Cache-control: private'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: pre-check=0, post-check=0, max-age=0'); 
    header('Pragma: anytextexeptno-cache', true); 
    header('Content-type: application/pdf'); 
    header("Content-Disposition: attachment; filename=$file"); //external 
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Expires: 0');
    readfile("hiddenfiles/$file");    
    

    HTML

      <a href="redirect.php?dl=mypdf1.pdf" target='_blank'>mypdf1.pdf</a>
      <a href="redirect.php?dl=mypdf2.pdf" target='_blank'>mypdf2.pdf</a>
      ...
    

    If you want all 3 at once, than you could provide an archive like zip or tar.