Я пытаюсь создать архив выбранных файлов, используя следующий код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 Warning: ZipArchive::close(): Read error: Is a directory in /home/user/zip.php on line 100
Я не могу понять причину этой неудачи. Сообщение об ошибке неясно. В чем причина этой неудачи?
Edit:
В соответствии с просьбой, добавил код для вызова обработчика архивного рассмотренный выше.
class A {
public function A1() {
/**
* the code above
*/
}
}
class B {
public function B1 {
$a = new A();
$a->A1();
}
}
Это часть приложения CakePHP 3. Принимая комментарии к подсказкам, когда я запускаю код самостоятельно вне приложения CakePHP 3, он работает отлично. Однако внутри приложения CakePHP есть некоторые проблемы. Я добавляю дополнительные теги, чтобы выделить вопрос в сообществе CakePHP.
Нет, это была опечатка здесь, в stackoverflow не в реальном коде. Я исправляю это. Спасибо, что указали! – i01000001
Можете ли вы дать мне код для $ файлов и быть уверенным, что в этих файлах есть только файлы, а не каталог? – Vindic
Спасибо за интерес к вопросу. Я добавил необходимые данные в вопрос выше. – i01000001