2011-04-18 173 views
0

在下载通过代码(PHP)zip文件,其示出了在浏览器的所有ASCII字符:下载ZIP文件

zip successfulPKZAq>.…u[ü¹…¿;../papa/control/other_image/2965Golf Cart Pencil Holder.jpg¤ýwTSOø7ŠÆŠ€ˆ EAˆJi*UZT¤—Q©!"[email protected]é[email protected]@@¤I”€ÔH$” %PB€$\¾ï=ëܵîzÏZçüN²æ¯ì콟™g>eföìÃ߇ó€ó†zz€cÇ€cG_À! ©c®{ÏÒÔ\ýŠ»‹œçW÷+·äo^¹àõq¿b`¨Åð±®þ•@•ÛÒ²W|ž>‡ú_ѺrëæMŽÃi€Îѹþß}þ;ɱÿ×'ùà9sÌõ˜Ç‰c×ÇyŽà9vØEyêÿ{àÿø;~âä©ÓlgØ98Àœ?vâÄñ“'N:yòè×°£ß'y....... 

这是正在下载的输出..和图像的一部分,可以你帮忙?

+0

它看起来像服务器发送一个错误的资源内容类型。右键点击链接并点击“下载”即可获取。 – 2011-04-18 14:00:40

回答

1

我的第一个猜测是服务器在response header中返回了不正确的内容类型。如果服务器告诉浏览器内容是文本,浏览器将尝试将其显示为文本。在PHP代码服务的文件时,尝试添加这样的事:

header('Content-type: application/zip'); 

请记住,通过HTTP传输数据时,绝对不会有一个概念“文件。”有一个请求和响应,每个响应都包含一个标题和数据。客户端(浏览器)可以选择使用本地系统的API将数据保存为文件,甚至可以为该文件建议一个名称。但它接受的不是一个“文件”。在这种情况下,响应标头对于发送的数据不正确。

+0

Nah,他也在代码中显示“zip成功”的地方,所以即使你将当前内容推送到浏览器,它也会被破坏。 – wimvds 2011-04-18 15:38:31

+0

@wimvds:啊,很好。雅,发送邮件时他的输出流不干净。他只是将它附加到当前输出。 – David 2011-04-18 15:41:58

2

由于您显示“zip成功” - 可能在您生成zip的某些代码中,浏览器将无法处理该文件(无论如何,无论使用的是应用程序/ zip标头,它都将被破坏) 。因此,首先清理您的代码,并确保在开始发送ZIP之前,不要向浏览器输出任何内容。然后添加以下到拉链居然推到客户端:

header('Content-type: application/zip'); 
header('Content-Disposition: attachment; filename="' . basename($fullPathToFile) . '"') 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($fullPathToFile)); 
header('Cache-Control: private'); 
ob_clean(); 
flush(); 
readfile($fullPathToFile); 
exit; 

其中$ fullPathToFile是对ZIP文件的完整路径(即/path/to/yourzip.zip)。

有关另一个示例,请参阅readfile文档。