Класс PHP ZipArchive не создает архив

Я пытаюсь создать архив выбранных файлов, используя следующий код

$zip_in = new \ZipArchive;
if ($zip_in->open('input.zip') === TRUE) {
    $files = array();
    for ($loop = 0; $loop < $zip_in->numFiles; $loop++) {
        $files[] = $zip_in->getNameIndex($loop);
    }
    $zip_in->extractTo('workspace');
    $zip_in->close();
    /**
     * Changes done to files extracted inside WORKSPACE DIR above
     */
    chdir('workspace');
    $zip_out = new \ZipArchive();
    $zip_out->open('output.zip', \ZipArchive::CREATE);
    foreach ($files as $file) {
        $zip_out->addFile($file);
    }
    $zip_out->close();
}

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

Переменная $files используется для хранения извлеченных имен файлов, нигде не затрагивается при редактировании файлов. Имена файлов жестко закодированы и не принимаются никакими переменными.

Последняя строка для окончательного сохранения архива output.zip выдает следующее предупреждение на консоли:

Предупреждение PHP: ZipArchive::close(): Ошибка чтения: каталог в /home/user/zip.php в строке 100

Я не могу понять причину этой неудачи. Сообщение об ошибке неясно. В чем причина этого сбоя?

Редактировать:

По запросу добавлен код для вызова обработчика архива, описанного выше.

class A {
    public function A1 () {
        /**
         * the code above
         */
    }
}

class B {
    public function B1 {
        $a = new A();
        $a->A1();
    }
}

Это часть приложения CakePHP 3. Если принять во внимание комментарии, когда я запускаю код независимо от приложения CakePHP 3, он работает просто отлично. Однако внутри приложения CakePHP есть некоторые проблемы. Я добавляю дополнительные теги, чтобы выделить вопрос в сообществе CakePHP.

1 ответ

Потому что ваш код неверен, и вы заменяете экземпляр ZipArchive файлом:

$ zip = addFile($ file);

заменить:

$ Zip-> AddFile($ файла);

Другие вопросы по тегам