2012-05-21 154 views
0

我有强制下载PDF的PHP代码。它适用于Mac,但不适用于Windows机器。我想这可能与linux服务器读取代码并创建一个mac可以读取但不是windows的文件有关?用PHP下载Force PDF文件 - 在Windows上文件损坏

$filename = str_replace(' ', '%20', $_GET['brochure']); 
header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header("Content-disposition: attachment; filename=\"$filename\""); 
readfile('http://siteurl.com/media/download/'.$filename); 
die(); 

关于如何获得此PDF的任何建议PDF格式下载?

该错误消息是

无法打开“文件名..”,因为它是要么不支持的文件类型 或因为该文件已被损坏(例如,它被作为一个电子邮件 发送附件并没有被正确解码)。

+0

如果您将浏览器直接指向'http://siteurl.com/media/download /'.$ filename',该怎么办? – ilanco

+0

尝试保存文件并在记事本(或类似的简单文件编辑器)中打开它,以查看文件顶部是否有任何错误。 –

+0

@ilanco在那里没问题。但是下载器(客户端请求) – iamjonesy

回答

1

也许您的浏览器正在缓存较旧版本的文件。尝试添加这些标头代码:

header("Cache-Control: maxage=1"); 
header("Pragma: public"); 

另一种选择:

保存在临时目录和文件使用下面的代码将它发送到客户端:

$file = readfile('/tmp/'.$filename); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/pdf'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 
+0

谢谢,但仍然收到错误信息 - 我已经将它添加到我的问题 – iamjonesy

+0

你放在你的代码是不是在我的答案代码... – ilanco

0

它可能因为文件名需要.pdf才能让Windows正确解释它。尝试下载文件重命名与.pdf在最后,然后试图打开它。

+0

看着Windows中的属性它'文件的类型'设置为Adobe Acrobat Docum (.pdf) – iamjonesy

+0

“无法打开'文件名..'”&“打开文件,它实际上包含了所呈现的html页面”。对我来说,它看起来像下载文件的链接有问题。你可以在链接展开后发布链接的实际文本吗? – Jaydee