В 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 также добавляются предыдущие архивы. как этого избежать. для каждой итерации на сервер должны быть загружены только данные текущего файла.

0
Gulzar Ali 16 Июн 2018 в 07:24
Я хочу очистить предыдущую итерацию для данных каждого цикла. и только данные текущего файла должны быть добавлены в zip-файл
 – 
Gulzar Ali
16 Июн 2018 в 09:51
Записи предыдущего архива zip не должны добавляться в текущий архив
 – 
Gulzar Ali
16 Июн 2018 в 09:53
Я не знаком с этой конкретной библиотекой. Нужно ли повторно инициализировать $this->zip каждый раз в цикле? Может быть, он сохраняет всю предыдущую информацию и дополняет ее вместо того, чтобы начинать заново с каждого файла?
 – 
Greg Schmidt
16 Июн 2018 в 09:56
Да $ this-> zip встроен в библиотеку codeigniter. который может содержать данные кеша.
 – 
Gulzar Ali
16 Июн 2018 в 10:01
Итак, вам нужно инициализировать его каждый раз в цикле, чтобы очистить этот кеш? Или нет?
 – 
Greg Schmidt
16 Июн 2018 в 10:02

2 ответа

Пожалуйста, попробуйте этот код

$this->load->library('zip');
$zip = $this->zip->CI_Zip();
$zip->add_data($name, $text);
$zip->archive('assets/subtitles/'.strip_tags($a).'.zip');
0
Praveen Kumar 16 Июн 2018 в 10:06
: - Добавьте свой статический массив в код вопроса ($ it).
 – 
Praveen Kumar
16 Июн 2018 в 11:11

После множества попыток я обнаружил, что это произошло из-за того, что библиотека zip-архива codeigniter использует данные кеша и в следующий раз добавит к ней больше данных. так это было решение

                    $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();

Которые не позволяют архиву хранить предыдущие данные.

0
Gulzar Ali 16 Июн 2018 в 15:02
Итак, это именно то, что я предположил? Кажется, это может потребовать как минимум одобрения моего комментария ... :-)
 – 
Greg Schmidt
16 Июн 2018 в 22:10