下载一个zip文件

时间:2011-04-18 13:56:47

标签: php download

通过代码(php)下载zip文件时,它在浏览器中显示所有ascii字符:

zip successfulPKZAq>.…u[ü¹…¿;../papa/control/other_image/2965Golf Cart Pencil Holder.jpg¤ýwTSOø7ŠÆŠ€ˆ EAˆJi*UZT¤—Q©!"-@HéUA@@@¤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.......

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

2 个答案:

答案 0 :(得分:2)

由于您正在显示“zip successful” - 可能在您生成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文档。

答案 1 :(得分:1)

我的第一个猜测是服务器在response header中返回了错误的内容类型。如果服务器告诉浏览器内容是文本,浏览器将尝试将其显示为文本。在提供文件的PHP代码中,尝试添加如下内容:

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

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