我使用此PHP类以.zip
格式下载我的后台文件:
public function download($file)
{
$filename = $this->dir . $file;
$fp = fopen($filename, "rb");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-length: " . filesize($filename));
header("Content-disposition: attachment;filename = " . $file . "");
header("Content-Transfer-Encoding: binary");
readfile($filename);
ob_end_clean();
die(fpassthru($fp));
fclose($fp);
}
这很有效,我成功下载了.zip
个文件。但是当我需要使用winrar提取.zip
文件时,我看到了这个错误:
db-backup-2014-11-15_14-18-48-12.zip: The archive is either in unknown format or damaged
。
下载:
开放时间:
提取物中的
:
注意:我的原始文件工作正常并使用winrar提取。
我认为我的问题是CRC32 = 0000000(在屏幕一中),因为在原始文件中有一个真值。
如何解决这个问题?!
答案 0 :(得分:4)
您的ZIP文件很可能已损坏,因为您的PHP脚本在关闭?>
标记后会包含空格,从而污染ZIP内容。要解决此问题,请从函数?>
所属的脚本中删除PHP结束标记download()
(同时检查是否没有前导空格,在打开<?php
标记之前放置)你的问题应该消失了。如果包含其他脚本,请检查它们是否也有空格。一般情况下,不应使用?>
标记,除非您确定由于已知原因需要它(这种情况非常罕见)。
答案 1 :(得分:3)
请尝试使用此下载功能:
<?php
public function download($file) {
ob_end_clean();
$filename = $this->dir . $file;
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=". pathinfo($filename , PATHINFO_BASENAME));
header("Content-Length: " . filesize($filename ));
readfile($fileName);
}