Php 下载zip文件

Php 下载zip文件,php,download,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÷+·

通过代码(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.......

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

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

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

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

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

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

因为您显示的是“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)

请参阅文档以了解另一个示例。

因为您正在显示“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)


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

服务器似乎为资源发送了错误的内容类型。右键单击该链接,然后单击“下载”以获取该链接。看起来服务器正在为资源发送错误的内容类型。右键单击链接并单击“下载”以获取该链接。不,他还在代码中的某个位置显示“zip成功”,因此即使您将当前内容推送到浏览器,它也将被损坏。@wimvds:啊,很好的捕获。是的,发送zip时他的输出流不干净。他只是将其添加到当前输出中。不,他还在代码中的某个地方显示“zip successful”,因此即使您将当前内容推送到浏览器中,它也会被破坏。@wimvds:啊,捕捉得好。是的,发送zip时他的输出流不干净。他只是将其附加到当前输出。