2014-11-05 181 views
0

从Yii下载zip文件导致压缩文件中的文件损坏。我可以打开zip,搜索其内容,但数据已损坏。在文件资源管理器中打开压缩文件显示压缩文件正常。下载文件时,该问题只显示了:Yii - 下载的zip文件已损坏

$zip = new ZipArchive(); 
if($zip->open($zipname, ZIPARCHIVE::CREATE) === TRUE){ 

    // add stuff to zip 
    $res = $zip->addFile($a, $b); 
} 

Yii::app()->getRequest()->sendFile($zipname, file_get_contents($zipname), "application/zip", true); 

我认为问题是出在$内容参数的Yii的SENDFILE。

内容参数应该怎么做,以便压缩文件没有损坏?

感谢

+0

尝试增加'$ zip->关闭();'您尝试发送的文件,看看是否能解决这个问题之前。 – 2014-11-05 19:34:39

+0

你有任何调试或跟踪运行(CWebLogRoute /或Yii调试工具栏等)?因为这些会在请求结束时输出内容,这会破坏一些文件类型。 – Stu 2014-11-06 10:06:36

+0

@WillemRenzema我有zip-> close(),只是忘了将它复制到问题中。 – MobileCushion 2014-11-06 10:14:13

回答

0

这解决了这个问题

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