如何在CakePhp中创建Zip文件并下载?

如何在CakePhp中创建Zip文件并下载?,php,cakephp,zip,zipfile,Php,Cakephp,Zip,Zipfile,我正在尝试使用CakePHP1.3创建zip文件。文件描述存储在数据库中。在我的控制器中,我使用以下逻辑 // Fetching File description form database. $this->view = 'Media'; $user_id=$this->Session->read('userData.User.id'); $condition = "Document.isdeleted = '0' AND Document.p

我正在尝试使用CakePHP1.3创建zip文件。文件描述存储在数据库中。在我的控制器中,我使用以下逻辑

   // Fetching File description form database.     
   $this->view = 'Media';
   $user_id=$this->Session->read('userData.User.id');
   $condition = "Document.isdeleted = '0' AND Document.project_id='".  $project_id."'";
   $projectDocumentList = $this->Document->find("all",array('conditions'=>$condition,'fields'=>array('Document.id','Document.document_name','Document.path'),'order' => array('Document.id ASC')));
   $this->set('projectDocumentList',$projectDocumentList);
   if(!empty($projectDocumentList)){
   $fileNames = "";
   $fileNamesArr = array();
    foreach($projectDocumentList as $projectDocument){     
     $fileNamesArr[ ]= $projectDocument['Document']['document_name'];
    }
   }

   // Making zip
   $archive_file_name='myFile.zip';
   $file_path= "my_file_path";// Here I'm using my server basepath

   $zip = new ZipArchive();   
   if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
    exit("cannot open <$archive_file_name>\n");
   }

   foreach($fileNamesArr as $files)
   {
   $zip->addFile($file_path.$files,$files);
   //echo $file_path.$files."<br>"; // This can show the file in browser
   }

   $zip->close();
   header("Content-type: application/zip");
   header("Content-Disposition: attachment; filename=$archive_file_name");
   header("Pragma: no-cache");
   header("Expires: 0");
   readfile("$archive_file_name");
   exit;
//从数据库获取文件描述。
$this->view='Media';
$user_id=$this->Session->read('userData.user.id');
$condition=“Document.isdeleted='0'和Document.project_id='”$项目编号“”;
$projectDocumentList=$this->Document->find(“全部”,数组('conditions'=>$condition,'fields'=>array('Document.id','Document.Document\u name','Document.path'),'order'=>array('Document.id ASC');
$this->set('projectDocumentList',$projectDocumentList);
如果(!空($projectDocumentList)){
$filename=“”;
$fileNamesArr=array();
foreach($projectDocumentList作为$projectDocument){
$fileNamesArr[]=$projectDocument['Document']['Document_name'];
}
}
//制作拉链
$archive_file_name='myFile.zip';
$file\u path=“我的文件路径”//这里我使用的是我的服务器基本路径
$zip=新的ZipArchive();
如果($zip->open($archive\u file\u name,ZIPARCHIVE::CREATE)!==TRUE){
退出(“无法打开”);
}
foreach($fileNamesArr作为$files)
{
$zip->addFile($file\u path.$files,$files);
//echo$file_path.$files.“
”;//这可以在浏览器中显示文件 } $zip->close(); 标题(“内容类型:应用程序/zip”); 标题(“内容处置:附件;文件名=$archive_file_name”); 标题(“杂注:无缓存”); 标题(“到期日:0”); readfile($archive\u file\u name); 出口
现在将zip文件下载为myFile.zip,但当我要打开该文件时,它会抛出一个错误“存档文件的格式未知或已损坏”。

创建整个文件夹的zip文件 然后将zip文件的路径传递给视图

$this->set('Zip_path'.zip_file_name);

$archive\u file\u name
不应只是文件名,而应是该文件的完整相对路径。
$this->set('Zip_path'.zip_file_name);