如何在php下载zip文件(yii)

时间:2016-05-09 11:59:35

标签: php yii download zip

如何在php yii框架中下载用户上传的文件?

我的网站上有用户列表,每个用户都可以为每个部分上传多个文件(工作信息,教育,证书等)

上传的文件正保存在上传文件中。这是链接

C:\wamp\www\project\themes\mydesign\assets\global\uploads

在uploads foler中,还有很多其他文件夹,文件夹以用户ID命名..

C:\wamp\www\project\themes\mydesign\assets\global\uploads\1\
C:\wamp\www\project\themes\mydesign\assets\global\uploads\2\
C:\wamp\www\project\themes\mydesign\assets\global\uploads\3\

1,2,3是user1,user2,user3 ..的文件夹名称,而1,2,3是user1,user2,user3的id

当用户首次上传任意文件并保存时,该用户的文件夹将在上传文件夹中创建。

所有用户文件的每个部分都保存在他们的文件夹中..现在我想在每个用户的删除按钮附近的CgridView中添加一个下载按钮..我想要为我想要的任何用户下载所有zip文件

这样做的任何示例代码?我应该使用什么工具,扩展程序或库?或者有可用的代码吗?我是yii的新手,不知道如何为每个用户获取所有文件并在zip文件夹中下载。任何建议。

1 个答案:

答案 0 :(得分:1)

第1步:您需要在网格中生成关联链接以调用Yii控制器 - >动作,让我们说一下actionZipDownload。为此,请点击以下链接:确保您也将userId传递给该操作。

  

http://www.yiiframework.com/wiki/593/yii-cgridview-add-custom-button/

步骤2:基于传递的userId对该操作进行操作,根据您的设置(目录结构),您需要目标关联用户目录路径。

步骤3:读取该特定目录中的所有文件,添加用于创建zip的文件并将zip文件存储在临时目录中。 zip名称可以是userId_date.zip

步骤2和3的源可能如下所示,您需要对相对路径进行一些调整,如$ destination。另请查看php文档中的http://php.net/manual/en/class.ziparchive.php

<?php
public function actionZipDownload(){
$userId = $_GET['userId']; // get the passed user id
$zip=new Zip Archive();
$destination=dirname($_SERVER['DOCUMENT_ROOT'])."/project/themes/mydesign/assets/global/uploads/".$userId."/filename.zip";
if($zip->open($destination,ZIPARCHIVE::CREATE) !== true) {
  return false;
}
 $doclist=CUploadedFile::getInstancesByName('files');
 foreach($doclist as $thefile)
 {
  $random=rand(11111,99999);
  $filename=$random.$thefile;      
  $zip->addFile($thefile->tempname,$filename);
 }
 $zip->close();   
 }
 ?>

步骤4:成功生成zip后,将响应发送到浏览器进行下载。

步骤5:成功下载后,您可能需要删除临时zip存档以节省空间。

  

从第2步到第5步,请点击此链接http://www.bsourcecode.com/yii-framework/yii-files/yii-zip-format/

希望有所帮助。