我想允许用户下载pdf文件,下载代码如下....出于某些奇怪的原因,即使文件正在下载,我也会收到错误消息,说明文件已在服务器上损坏。 ..有人可以帮助我,指出我犯错的地方。
<php
$name = $_POST["name_first"];
$mail = $_POST['email'];
$number = $_POST['phone_number'];
$email_message = "first name: {$name} email is {$mail} number is {$number} ";
mail('fanaa@gmail.com', 'Form Response', $email_message);
if ($mail == "" OR $name == "" OR $number == "")
{
echo "Enter valid details ";
}
else
{
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="tokina.pdf"');
readfile('docs/tokina.pdf');
}
?>
答案 0 :(得分:13)
我使用此代码下载pdfs:
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Type: application/octetstream');
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename=\"".basename($filename)."\"");
readfile("$file");
}
这应该没问题,并确保没有空格或返回字符(不要逃避php是最好的解决方案)。
如果您发现仍有问题,请使用记事本打开损坏的文件(内部可能存在php错误警告)。
希望这有帮助!
答案 1 :(得分:3)
删除标题并查看页面,您是否看到任何错误消息?如果PHP输出的内容不是实际的PDF源,则该文件似乎已损坏。
答案 2 :(得分:1)
header('Content-type: application/pdf');
启用PHP扩展程序php_gettext
,您就完成了。
答案 3 :(得分:0)
尝试取出
中的双引号header('Content-type: "application/octet-stream"');
所以它变成了
header('Content-type: application/octet-stream');
答案 4 :(得分:0)
也许您的内容类型不正确。试试这个:
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
答案 5 :(得分:0)
您的PDF文件tokina.pdf未上传或与PHP文件不在同一目录中。这就是为什么它保存为“tokina.pdf.htm” - 它正在为404页面加载HTML。这就是为什么您的浏览器/ PDF查看器认为该文件“已损坏” - 因为它的扩展名是PDF但其内容不是。
确保文件已上传,如果是,请确保readfile
指向正确的路径。如果它不在同一文件夹中,请使用相对/绝对路径,例如:
readfile('docs/tokina.pdf');
是的,内容类型应为application/pdf
答案 6 :(得分:0)
使用此脚本
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($filenamepath));
readfile($filenamepath);
我遇到了同样的问题。使用像UltraEdit这样的十六进制编辑器比较原始文件和下载的文件,我在损坏的文件的开头找到了一些字符。
问题是在?>
标记PHP代码结束后,我的代码中有几次行终止符。
删除?>
之后的所有行终止符,并阅读论坛文章Downloaded Files are corrupt - Common Problem。这对我有用。
我希望能帮助你。
答案 7 :(得分:0)
我用
$download_path = your path (where to look for the files)
set_time_limit(0);
$file_url = $download_path . $data['link'];
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file_url). '"');
//then to read the file
readfile($file_url);
这通常对我有用