【问题标题】:how to convert folder into Zip file in codeigniter where folder contains some image file如何在codeigniter中将文件夹转换为Zip文件,其中文件夹包含一些图像文件
【发布时间】:2017-11-09 16:29:03
【问题描述】:

我对在codeigniter中压缩文件夹有一些疑问。实际上我在文件夹中有一些图像文件,我试图在codegiter中压缩这个文件夹。我有查看文件,我在其中编写了“下载所有文件”按钮。单击此按钮时,我必须取出文件夹并将其压缩。 我的视图文件: 我在锚标签内写了“下载所有文件”按钮。

<tr>
    <td align="right">
        <?php  if(isset($AppData) && !empty($AppData)) { 
          $applicantNo = $AppData[0]['appid']; ?>
        <a href='<?php echo base_url("admin/downloadAllFileZip/$applicantNo");?>'><input type="submit" name="download" value="Download All Files" /></a> 
         <?php } ?>

    </td>
   </tr>

控制器代码: 在 admin.php 控制器文件中,我有以下方法

public function downloadAllFileZip($appId) 
    {

        $path = file_get_contents(base_url().'files/'.$appId);          
        $applicant_id = $appId;
        $this->zip->add_data($applicant_id,$path);
        $this->zip->archive('/files/'.$applicant_id);       
        $this->zip->download($applicant_id); 

    }

但是,当我单击“下载所有文件”按钮时,正在弹出用于压缩的弹出窗口,并且在下载其显示的 1kb 文件后,该文件上没有图像。我可以将单个图像文件压缩为 zip 文件,但不能压缩整个文件夹。请帮助我如何做到这一点。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    像这样添加你的所有文件。例如:

    foreach ($query->result() as $row)
    {
        $this->zip->read_file($row->filename);
    }
    
    $this->zip->download('files_backup.zip');
    

    【讨论】:

    • 不需要取 foreach ($query->result() as $row)。我没有写任何 sql 查询
    • 仅供参考,您可以这样添加图片文件
    • 只是我从锚链接的参数中传递文件夹名称,在控制器中我从路径中获取文件夹名称并将其压缩。
    【解决方案2】:

    要归档文件夹中的所有文件,请使用$this-&gt;zip-&gt;read_dir(); 方法。例如,

    $path = '/path/to/folder';
    $this->zip->read_dir($path); 
    $this->zip->archive('/path/to/folder/foldername.zip');
    

    了解更多信息。请看:https://www.codeigniter.com/user_guide/libraries/zip.html

    【讨论】:

    • 我使用了 $this->zip->add_dir();以上 $this->zip->read_file() 我可以下载文件夹,但文件夹内没有图像文件。
    • 请检查文件夹权限,应该是755或777。
    • 不在服务器中。我可以使用相同的代码以 zip 格式下载单个图像。我可以下载文件夹,但文件夹内没有可用的图片。
    【解决方案3】:

    Zip 库允许您创建 Zip 档案

    $this->load->library('zip');
    

    提供要添加到存档中的文件夹的路径

     $file_name='backup['.date('d-m-Y-H:i:s').'].zip';
     $this->zip->read_dir($_SERVER['DOCUMENT_ROOT']."/uploads/images",FALSE);
     $this->zip->download($file_name);
    

    我认为给特定文件夹上的存档文件夹提供绝对路径是更好的方法

    【讨论】:

    • 不添加 $this->zip->add_dir($appId);单击“下载所有文件”按钮后,它会重定向到空白页面,因此我已添加。我可以下载 zip 文件,但文件夹是空的
    • 首先从您的文件夹中打开一个图像到浏览器,然后将相同的 url 粘贴到读取目录中并检查它的工作与否像 $this-&gt;zip-&gt;read_file($_SERVER['DOCUMENT_ROOT']."/uploads/img/img1.png",FALSE);
    • 是的,我可以看到图像,但我已经下载了整个文件夹。
    • 在我的项目中,files是包含候选人注册号的文件夹名称,作为包含文档的文件夹名称。
    • 那么上面的代码应该与read_dir一起工作,无论您的文件夹中包含哪种类型的东西。@RagithThomas
    【解决方案4】:
    $this->load->library('zip');
    $path = '/path/to/your_directory/';    
    $this->zip->read_dir($path);    
    $this->zip->download('my_backup.zip'); 
    

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2020-06-09
      • 2022-11-10
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多