使用php中的每个循环上传zip档案会导致在codeigniter中的zip文件中重复zip档案

时间:2018-06-16 04:24:15

标签: php codeigniter

在PHP CodeIgniter中我试图从远程源获取并提取多个zip文件:

foreach($it as $a) {
    $file='http://www.yifysubtitles.com/subtitle/'.strip_tags($a).'.zip';
    $newfile = strip_tags($a).'.zip';

    if (!copy($file, $newfile)) {
        echo "failed to copy $file...\n";
    } else {
        $open = zip_open($newfile);
        if (is_numeric($open)) {
            echo "Zip Open Error #: $open";
        } else {    
            while($zip = zip_read($open)) {
                zip_entry_open($zip);
                $text = zip_entry_read($zip , zip_entry_filesize($zip));
                zip_entry_close($zip);
            }
        }
    }
    $this->load->library('zip');
    $name = strip_tags($a[0]).".srt";
    $this->zip->add_data($name, $text);
    $this->zip->archive('assets/subtitles/'.strip_tags($a).'.zip');
}

首次将zip文件上传到服务器时,它可以正常工作,但是当循环执行第二次时,zip文件包含两个zip存档,第二个zip文件也包含第一个存档。 I,E

1

12

123

但我想要

1

2

3

我哪里错了? 当第二次添加数据时,之前的档案也会添加到zip中。如何避免这种情况。 对于每次迭代,只应将当前文件数据上传到服务器。

2 个答案:

答案 0 :(得分:0)

请尝试此代码

$this->load->library('zip');
$zip = $this->zip->CI_Zip();
$zip->add_data($name, $text);
$zip->archive('assets/subtitles/'.strip_tags($a).'.zip');

答案 1 :(得分:0)

经过多次尝试,我发现它是由于codeigniter zip归档库使用缓存数据,下次有更多数据添加到它。所以这就是解决方案

                    $this->load->library('zip');
                    $name = strip_tags($a).".srt";
                    $this->zip->add_data($name, $text);
                    $this->zip->archive('assets/subtitles/'.strip_tags($a).'.zip');

我只需添加这行简单代码

                     $this->zip->clear_data();

阻止存档保存以前的数据。

相关问题