如何在CakePhp中创建Zip文件并下载?
我正在尝试使用CakePHP1.3创建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
// 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);