使用 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 档案重复的主要内容,如果未能解决你的问题,请参考以下文章