Думаю, никому не нужно объяснять, насколько широко сегодня используются zip архивы. Поддержка этого формата реализована во всех современных операционных системах, а библиотеки для работы с ним, написаны для большинства языков программирования.
В этой статье я покажу, как написать небольшой PHP скрипт, создающий zip архив.
Прежде всего, убедитесь, что включена поддержка всех нужных функций. Для этого в файле php.ini
нужно убрать символ комментария (;) в начале строки:
extension=php_zip.dll
Теперь переходим к созданию архива.
Все операции с архивом выполняются с помощью объекта ZipArchive, создать его не сложно:
$zip = new ZipArchive();
После этого нужно создать файл архива с помощью метода open()
, который в качестве параметров принимает имя архива и константу, указывающую способ открытия (об этом чуть позже).
Если на этом этапе ошибок не произошло, то с помощью метода addFile()
можно добавить в архив файлы. Метод принимает два параметра:
первый – имя исходного файла;
второй – имя под которым файл будет добавлен в архив (если этот параметр не указан, будет использовано имя из первого параметра).
Примечание. Тут есть один нюанс. Если имя исходного файла “d:/docs/myfile.txt” и вы не укажите второй параметр, то в архиве будет создана папка “d”, а в ней – “docs”. Файл “myfile.txt” будет размещен в “docs”. Чтобы избежать создания папок в архиве просто укажите во втором параметре “myfile.txt”, и тогда файл будет размещен в корне архива.
Завершает работу с архивом метод close()
.
Так, с теорией закончили. Теперь посмотрим, как все это работает на примере.
Напишем небольшой скрипт, который будет создавать архив со всеми файлами из какой-нибудь папки.
<?php //папка в которой будет размещен архив $archive_dir = "E:/archiveFolder/"; //папка с исходными файлами $src_dir = "E:/srcFolder/"; //создание zip архива $zip = new ZipArchive(); //имя файла архива $fileName = $archive_dir."backup_".date('j_m_Y_h_i_s').".zip"; if ($zip->open($fileName, ZIPARCHIVE::CREATE) !== true) { fwrite(STDERR, "Error while creating archive file"); exit(1); } //добавляем файлы в архив все файлы из папки src_dir $dirHandle = opendir($src_dir); while (false !== ($file = readdir($dirHandle))) { $zip->addFile($src_dir.$file, $file); } //закрываем архив $zip->close(); fwrite(STDOUT, "Archive created\n"); exit(0); ?>
Переменная $src_dir
содержит путь к папке с исходными файлами, а $archive_dir
– путь к папке в которой будет создан архив.
Примечание: учтите, что наш скрипт эти папки не создает, поэтому сделайте это самостоятельно.
В переменной $fileName
содержится имя архива. К имени я добавил дату и время создания архива в формате “день_месяц_год_часы_минуты_секунды”. Это позволяет многократно запускать скрипт и не думать о том, что новая версия архива запишется поверх старой.
В строках 11-14 мы открываем архив, при этом используется константа ZIPARCHIVE::CREATE
, которая указывает, что если архива не существует, то он должен быть создан. Если во время создание архива возникли ошибки, выводим сообщение и завершаем работу.
После этого, мы открываем папку с исходными файлами и добавляем их в архив (строки 17-20).
Метод close() (в строке 22) закрывает архив.
Запускаем скрипт:
php путь_к_скрипту\имя_скрипта.php
Если ошибок не было, в папке «E:/archiveFolder/» вы будет создан архив.
Как видите, ничего сложного. В следующий раз я покажу как извлечь файлы из архива.
Постовой
Если нужен щебень заходите на vost.ru