0

我将我网站中的访问者从页面 A 重定向到页面 B。在页面 BI 中,希望用户获取下载的 PDF 文件(在页面 B 加载时下载)。我从另一篇文章中获取了代码(请参阅此处回答的上一个问题),我的 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 %���� 3 0 obj <>流 x���MK1�o�+�$zIg&�� V=T�=Xo����K��i+#V�yx3��඀ (BX�pW`

服务器:操作系统Linux;PHP版本:5.2.17

访问者 -> 浏览器:Firefox;操作系统:Windows 2000

是否可能由于客户端的旧操作系统而失败?如果没有,有人知道如何强制下载的解决方案吗?任何帮助将不胜感激。

谢谢。

4

2 回答 2

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;
于 2012-06-24T13:41:26.957 回答
0

首次引入 Content-disposition 时,真正旧的浏览器有一个怪癖,一些真正旧的浏览器不会显示“另存为”对话框,除非它无法识别您尝试打开的文件类型。尝试将 Content-type 设置为空(或无法识别的内容),看看这是否会强制旧版浏览器弹出另存为对话框。

header('Content-type: ');

如果可行,那么我建议在运行该行之前添加一行 PHP 以检测它们是否在旧浏览器上,因为现代浏览器将使用该标题来确定应该用什么程序打开文件。

于 2012-06-24T14:16:52.047 回答