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


How to download files in zip in php (yii)

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

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

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

C:'wamp'www'project'themes'mydesign'assets'global'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、用户2、用户3的id

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

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

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

步骤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/

希望有帮助。