【问题标题】:How to download files in zip in php (yii)如何在 php (yii) 中以 zip 格式下载文件
【发布时间】:2016-05-09 11:59:34
【问题描述】:

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

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

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

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

在上传文件夹中,还有很多其他文件夹,文件夹以用户名命名..

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 文件夹中。任何建议。

【问题讨论】:

    标签: php yii download zip


    【解决方案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 的相对路径进行一些调整。还要检查 http://php.net/manual/en/class.ziparchive.php 的 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/

    希望有所帮助。

    【讨论】:

    • 是的,但是我如何在步骤 2,3 上工作?这就是我所困惑的,我将如何通过他们的用户 ID 从每个用户的上传文件夹中获取文件?作为 yii 的新手,不知道如何开始!有任何示例代码吗?
    • 我尝试为第 2 步和第 3 步编写示例代码。您可以调试脚本并对脚本进行一些调整。让我知道这是否是您要找的。​​span>
    • 我对上面的代码做了一些修改,请再次检查。成功了吗?
    • 还有你用的是哪个 Yii 版本?
    • 我已经对代码进行了一些更改并根据我的要求进行了修复,它正在工作,我提供了错误的 zip 文件保存位置。
    猜你喜欢
    • 2021-09-24
    • 2017-01-12
    • 1970-01-01
    • 2011-04-28
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多