Создание zip архивов с помощью PHP скрипта
Думаю, никому не нужно объяснять, насколько широко сегодня используются 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_m_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
Понравилась статья? Подписывайтесь на продолжение
!
Опубликовано в PHP View Comments
-
Derfid
-
Ralph DiMarko
-
Владимир
-
Ralph DiMarko
-
Владимир
-
Дима
-
Валерий
-
Владимир
-
Дмитрий
-
Владимир
-
Дмитрий
-
Alexsander
-
prescott
-
Dockeee
-
Maxim
-
Владимир
-
Dockeee
-
Dockeee
-
Владимир
-
Владимир
-
Владимир
-
lio
-
Владимир
-
Владимир
-
Владимир
-
Владимир
-
lio
-
Владимир
-
Файна
-
Владимир
-
lio
-
Владимир
-
Денис Огурцов
-
Владимир
-
Николай
-
Владимир
-
lio
-
Владимир
-
Алексей
-
Владимир
-
Сергей
-
Владимир
-
юра диденко
-
Владимир
-
Lev
-
Владимир
-
Lev
-
Алекс
-
Владимир
-
Алекс








