2012-05-14 47 views
8

我试图让网站有一个强制下载PDF的按钮。使用PHP强制下载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的(文件/ ECM_IT_ResumeDownload.pdf)[function.readfile]:未能打开流:在HTML没有这样的文件或目录/脚本/的download.php上线

该文件是definit尽管如此。在HTML /文件/ ECM_IT_ResumeDownload.pdf

+2

将链接标签中的输入标签包装很奇怪 – Ben

+0

最有可能是某些东西导致输出包含一些无效的pdf内容..也许服务器发生错误。尝试在文本编辑器中打开结果文件 – Ben

+0

Ahh我没有注意到,我已经做了另一个链接,但没有注意到我仍然有 –

回答

2

您是否尝试过摆脱结束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”。如果其中一条路径正常工作并正确下载,则相对路径在某些方面不正确。

+0

那是什么我不知道,我还以为你总是不得不关闭它们 但它不解决问题不幸 –

+2

在ReadFile的尝试绝对路径()调用:“C:/html/downloads/ECM_IT_ResumeDownload.pdf”或什么。 – abelito

+0

这个技巧谢谢:) –

4

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

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

仍然有同样的错误。 –

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

顺便说一句,有点晚了,但正确这里确定问题:

你的下载脚本在scripts/download.php和您要下载的文件在documents/[...].pdf

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