Using php to force download a pdf

56,522

Solution 1

Have you tried getting rid of the closing PHP tag (the ?>) at the end? It will treat the page as a pure PHP page, removing any possible new lines that might accidentally get appended to the end of the output. This helped me when I was dynamically creating excel files for download, and they were downloading as corrupted. Check out this page for more information:

http://www.php.net/manual/en/language.basic-syntax.phptags.php

From your edited question, it seems like PHP is unable to find the file. Try using an absolute path to the file like so: "c:\blah\de\blah\bloo.pdf" or "c:/blah/de/blah/bloo.pdf". If one of those paths works and downloads correctly, your relative path is incorrect in some way.

Solution 2

$file_url = www.example.com/pdffolder/$pdfname;
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);

Solution 3

Try removing the path to the file and just leave the file name in the content:

header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf');
Share:
56,522
Craig Traynor
Author by

Craig Traynor

Updated on July 09, 2022

Comments

  • Craig Traynor
    Craig Traynor almost 2 years

    Im trying to get a website to have a button that forces a download of a pdf.

    Heres the html of the button:

        <a href=scripts/download.php>
        <input type="image" src="images/download.gif" alt="Submit button"/>
        </a>
    

    And the php script so far:

        <?php
        header('Content-Type: application/pdf');
        header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf');
        readfile('documents/ECM_IT_ResumeDownload.pdf');
        ?>
    

    This seems to download the file fine but when I go to open it i get this error:

    "Adobe Reader could not open 'documents_ECM_IT_ResumeDownload.pdf' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded)."

    Any help would be greatly appreciated.

    EDIT Opened the pdf in a text editor and got this message:

    "
    Warning: readfile(documents/ECM_IT_ResumeDownload.pdf) [function.readfile]: failed to open stream: No such file or directory in html/scripts/download.php on line 4
    "

    The document is definitely there though. in html/documents/ECM_IT_ResumeDownload.pdf

  • Craig Traynor
    Craig Traynor about 12 years
    Thats something I didnt know, i thought you always had to close them But it doesnt solve the problem unfortunately
  • abelito
    abelito about 12 years
    Try an absolute path in the readfile() call: "c:/html/downloads/ECM_IT_ResumeDownload.pdf" or whatever.
  • abelito
    abelito about 12 years
    Hoora! No problem, have a great night :)
  • undefined
    undefined over 3 years
    > header("Content-disposition: attachment; filename=".$pdfname); I would also recommend you encode it just in case ... urlencode($pdfname)