在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中。如何避免这种情况。 对于每次迭代,只应将当前文件数据上传到服务器。
答案 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();
阻止存档保存以前的数据。