Yii2生成zip文件并下载 - 在YII2.0中

时间:2017-03-18 19:43:16

标签: php yii2 zip yii2-advanced-app ziparchive

我有一个情况,我有用户数据列表,在那个数据细节中,我也存储了一个文件。 现在,当用户点击像DOWNLOAD这样的按钮时,我想下载zip文件中的所有用户文件。

我已经在控制器中编写了一个动作,我正在获取要下载的文件,但是我无法编写用于制作zip finle的代码并下载它。 下面是我在控制器中的代码。

public function actionMain($jid)
{
     $values = UserRequest::find()->where(['sender_code'=>$jid,'status'=>1])->all();
       $i=1; foreach($values as $data) { 
             $users = Users::find()->where(['access_code'=>$data->reciever_code])->one();
             $file_names[]= $users->attach_cv;
         }
 }

这很好用。在$ file_name中获取所有文件,但我想在zip文件夹中下载这些文件。

请帮我解决这个问题

提供的链接在核心php中,并且很容易实现。但是如何在框架中做同样的事情。因为我有行动的文件名数组。如上所示。我是否需要在相同的操作或任何其他操作中编写用于生成.ZIP的代码。

1 个答案:

答案 0 :(得分:0)

我建议您使用ZipArchive评论中指定的SiZE。 这样,您可以在开始下载之前启动压缩过程。

文件创建:

/**
 * Generate zip file for upload
 *
 * @throws Exception
 */
private function createZip($files)
{
    $file = 'full_path_to_file/your_file_name.zip';

    $zip = new ZipArchive();
    if ($zip->open($file, ZipArchive::CREATE) !== TRUE) {
        throw new \Exception('Cannot create a zip file');
    }

    foreach($files as $file){
        $zip->addFile($file[file_name], $file[local_name]);
    }

    $zip->close();

}

然后您可以在行动中返回要下载的zip文件路径