使用php强制下载pdf

5lhxktic  于 2023-05-16  发布在  PHP
关注(0)|答案(6)|浏览(150)

我试图让一个网站有一个按钮,迫使下载的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]:无法打开流:第4html/scripts/download.php中没有该文件或目录


文件肯定在那里。in html/documents/ECM_IT_ResumeDownload.pdf

jv4diomz

jv4diomz1#

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

a6b3iqyw2#

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

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

wswtfjt73#

你有没有试过去掉PHP的结束标记(the?”””在最后?它会将页面视为纯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”。如果其中一个路径正常工作并正确下载,则您的相对路径在某些方面不正确。

polkgigr

polkgigr4#

顺便说一句,有点晚了,但要正确识别问题在这里:
您的下载脚本位于scripts/download.php,您要下载的文件位于documents/[...].pdf
因此,readfile()函数应该遍历父目录(scripts/之外),例如:readfile('../documents/[...].pdf');

mw3dktmi

mw3dktmi5#

您可以添加:ob_clean();在第一个header之前。这是为了避免在文件的开头出现空格。

332nm8kg

332nm8kg6#

我一直使用Gowon Patterson的下载脚本,它也有防盗链保护:https://github.com/gowonltd/getter(2023年工作链路)

相关问题