Создание zip архивов с помощью PHP скрипта

Владимир | | 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_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