我将网站中的访问者从第A页重定向到第B页。在第B页中,我希望用户获取下载的PDF文件(在加载页面B时下载)。 我从另一篇文章中获取了代码(参见previous question answered here),我的第B页代码如下:
<?php
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf');
$fn=fopen("/wp-content/nature.pdf","r");
fpassthru($fn);
?>
输出不是通过打开下载对话框,而是在浏览器中显示一些不可读的字符,如下所示(我刚刚在下面选了一个小样本):
%PDF-1.4% 30 obj&lt;&gt;流x MK1 o + $ zIg&amp; V=T =Xo K i+# Vyx3(BXpW`
服务器:OS Linux; PHP版本:5.2.17
访客 - &gt;浏览器:Firefox;操作系统:Windows 2000
由于客户端的旧操作系统可能会失败吗?如果没有,是否有人知道如何强制下载的解决方案?任何帮助都将受到高度赞赏。
感谢。
答案 0 :(得分:1)
使用Content-Length标题尝试:
ob_clean(); ob_start();
header('Content-Disposition: attachment; filename=nature.pdf');
header('Content-type: application/pdf');
header ("Content-Length: ".filesize("/wp-content/nature.pdf"));
readfile("/wp-content/nature.pdf");
exit;
答案 1 :(得分:0)
在首次引入Content-disposition时,真正旧的浏览器中出现了一个怪癖,一些非常旧的浏览器不会显示“另存为”对话框,除非它无法识别您尝试的文件类型打开。尝试将内容类型设置为空(或无法识别的内容),并查看是否会强制旧浏览器弹出另存为对话框。
header('Content-type: ');
如果可行,那么我建议在运行该行之前添加一行PHP以检测它们是否在旧浏览器上,因为现代浏览器将使用该标头来确定该文件应该是什么程序打开了。