2017-02-09 19 views
1

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

ответ

1

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

$ зип = AddFile ($ файл);

заменить:

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

+0

Нет, это была опечатка здесь, в stackoverflow не в реальном коде. Я исправляю это. Спасибо, что указали! – i01000001

+0

Можете ли вы дать мне код для $ файлов и быть уверенным, что в этих файлах есть только файлы, а не каталог? – Vindic

+0

Спасибо за интерес к вопросу. Я добавил необходимые данные в вопрос выше. – i01000001