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

Posted

技术标签:

【中文标题】使用 php 中的每个循环上传 zip 档案会导致 codeigniter 中 zip 文件中的 zip 档案重复【英文标题】:Uploading zip archives using for each loop in php causes repetition of zip archives in zip file in codeigniter 【发布时间】:2018-11-25 20:26:11 【问题描述】:

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 文件也包含第一个存档。 我,我

1

12

123

但我想要

1

2

3

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

【问题讨论】:

我想清除每个循环数据的先前迭代。并且只应将当前文件数据添加到 zip 文件中 不应将以前的存档 zip 条目添加到当前存档中 我不熟悉这个特定的库。 $this->zip 每次循环都需要重新初始化吗?也许它保留了所有早期信息并添加到其中,而不是从每个文件重新开始? 是的 $this->zip 内置在 codeigniter 库中。其中可能包含缓存数据。 那么,您需要每次通过循环初始化它以清除该缓存吗?还是没有? 【参考方案1】:

请试试这个代码

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

【讨论】:

@GulzarAli :- 请在问题代码 ($it) 中添加您的静态数组。【参考方案2】:

经过多次尝试,我发现这是由于 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();

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

【讨论】:

那么,这正是我所建议的吗?似乎这可能至少需要对我的评论投赞成票...... :-)

以上是关于使用 php 中的每个循环上传 zip 档案会导致 codeigniter 中 zip 文件中的 zip 档案重复的主要内容,如果未能解决你的问题,请参考以下文章

PHP 处理档案中的文件

使用 REST API 上传到 Azure Blob 存储时,Zip 档案损坏

如何系Discuz上载档案10分

如何从 Unix 命令行递归解压缩目录及其子目录中的档案?

自安装 Zip 档案(解压后运行应用程序)

使用 CURL 下载的档案无效