【问题标题】:Using php to force download a pdf使用php强制下载pdf
【发布时间】:2012-05-21 13:19:59
【问题描述】:

我试图让一个网站有一个强制下载 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 中

【问题讨论】:

  • 将输入标签包装在链接标签中很奇怪
  • 很可能是某些原因导致输出包含一些无效的 pdf 内容。也许服务器正在抛出错误。尝试在文本编辑器中打开结果文件
  • 啊,我没有注意到,我已经为另一个链接做了那个,但没有注意到我仍然有那个
  • 您是否尝试过比较源文件和下载文件?
  • 确保?&gt; 之后没有尾随空格,这将成为下载的一部分。事实上,完全消除?&gt; 这样就不会出现问题了。

标签: php html download http-headers


【解决方案1】:
$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);

【讨论】:

  • > header("Content-disposition: attachment; filename=".$pdfname); 我还建议您对其进行编码以防万一... urlencode($pdfname)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您是否尝试过去掉最后的 PHP 结束标记(?>)?它将页面视为纯 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”。如果其中一个路径可以正常工作并且下载正确,那么您的相对路径在某种程度上是不正确的。

    【讨论】:

    • 那是我不知道的事情,我以为你总是不得不关闭它们但不幸的是它并没有解决问题
    • 在 readfile() 调用中尝试绝对路径:“c:/html/downloads/ECM_IT_ResumeDownload.pdf”或其他。
    • 万岁!没问题,祝你有个愉快的夜晚:)
    【解决方案4】:

    我一直使用 Gowon Patterson 的下载脚本,它也有防盗链功能: http://by.gowondesigns.com/getfile/

    【讨论】:

      【解决方案5】:

      顺便说一句,有点晚了,但要在这里正确识别问题:

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多