使用php强制下载pdf

时间:2012-05-14 02:17:44

标签: php html download http-headers

我试图让一个网站有一个强制下载pdf的按钮。

继承按钮的html:

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

到目前为止的PHP脚本:

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

这似乎下载文件很好但是当我打开它时我得到这个错误:

“Adobe Reader无法打开'documents_ECM_IT_ResumeDownload.pdf',因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)。”

非常感谢任何帮助。

修改 在文本编辑器中打开pdf并收到此消息:


警告:readfile(documents / ECM_IT_ResumeDownload.pdf)[function.readfile]:无法打开流: html / scripts / download.php 上没有这样的文件或目录 4

该文件肯定存在。在html / documents / ECM_IT_ResumeDownload.pdf

5 个答案:

答案 0 :(得分:23)

$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);

答案 1 :(得分:4)

尝试删除文件的路径,并将文件名保留在内容中:

header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf');

答案 2 :(得分:2)

您是否尝试过最后删除结束的PHP标记(?&gt;)?它将页面视为纯PHP页面,删除可能意外附加到输出末尾的任何可能的新行。当我动态创建excel文件以供下载时,这帮助了我,并且它们已经下载为已损坏。有关更多信息,请查看此页面:

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

从您编辑的问题中,似乎PHP无法找到该文件。尝试使用文件的绝对路径,如:“c:\ blah \ de \ blah \ bloo.pdf”或“c:/blah/de/blah/bloo.pdf”。如果其中一条路径正常工作并正确下载,则您的相对路径在某种程度上是不正确的。

答案 3 :(得分:0)

我总是使用Gowon Patterson的下载脚本,它也有热链接保护: http://by.gowondesigns.com/getfile/

答案 4 :(得分:0)

顺便说一下,有点晚了,但要在这里正确找出问题:

您的下载脚本位于scripts/download.php,您要下载的文件位于documents/[...].pdf

因此,您的readfile()函数应该遍历父目录(scripts/之外),例如readfile('../documents/[...].pdf');