Создание 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();
-
//имя файла архива
-
if ($zip->open($fileName, ZIPARCHIVE::CREATE) !== true) {
-
}
-
-
//добавляем файлы в архив все файлы из папки src_dir
-
$zip->addFile($src_dir.$file, $file);
-
}
-
//закрываем архив
-
$zip->close();
-
-
-
?>
Переменная $src_dir содержит путь к папке с исходными файлами, а $archive_dir – путь к папке в которой будет создан архив.
Примечание: учтите, что наш скрипт эти папки не создает, поэтому сделайте это самостоятельно.
В переменной $fileName содержится имя архива. К имени я добавил дату и время создания архива в формате “день_месяц_год_часы_минуты_секунды”. Это позволяет многократно запускать скрипт и не думать о том, что новая версия архива запишется поверх старой.
В строках 11-14 мы открываем архив, при этом используется константа ZIPARCHIVE::CREATE, которая указывает, что если архива не существует, то он должен быть создан. Если во время создание архива возникли ошибки, выводим сообщение и завершаем работу.
После этого, мы открываем папку с исходными файлами и добавляем их в архив (строки 17-20).
Метод close() (в строке 22) закрывает архив.
Запускаем скрипт:
php путь_к_скрипту\имя_скрипта.php
Если ошибок не было, в папке "E:/archiveFolder/" вы будет создан архив.
Как видите, ничего сложного. В следующий раз я покажу как извлечь файлы из архива.
Понравилась статья? Подпишитесь на продолжение
!
Опубликовано в PHP
Комментарии (15)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.
Оставить комментарий







А можно ли задать уровень компрессии (минимальный, максимальный…)?
Честно говоря, я не нашел в документации четкого ответа.
Но для создания архива PHP использует библиотеку zlib, для которой в php.ini можно задать два параметра:
zlib.output_compression
zlib.output_compression_level
Если есть желание, попробуйте поиграться.
А обязательно прописывать путь, по которому будет создан архив? Можно ли сделать так, чтобы пользователь сам выбрал, куда он хочет сохранить свой файл архива?
Можно, только это зависит от интерфейса с которым работает пользователь.
Если используется web интерфейс, то, один из вариантов, создать форму в которую он будет вводить путь к архиву. А после этого подставлять введенный путь.
а можно ли зазиповать целую папку с файлами?
Одной строкой кода - нет.
Но в этой статье я привел скрипт создания архива целой папки (последний листинг). Он в цикле проходит по всей папке и добавляет в архив все найденные файлы.
В общем-то его не сложно изменить для просмотра вложенных папок.
"Fatal error: Cannot instantiate non-existent class: ziparchive in y:\home\localhost\www\foto\index.php on line 10"
хотя и в файле пхп.ини убрал значок комента….
в чем дело??может потомучто у меня стоит Денвер?
я уже даже скачал php_zip.dll и закинул в папку extensions…ошибка всё таже… почему не работает….??
Посмотрите, что выводит phpinfo(). Там должен быть раздел zip. И в нем параметры
Zip: enabled
Extension Version: $Id: php_zip.c,v 1.1.2.38 2007/08/06 22:02:32 bjori Exp $
Zip version: 2.0.0
Libzip version: 0.7.1
Версии могут отличаться.
там написано:
Zip support: enabled
и всё! как его подключать?
Подключать никак не надо. После того как библиотека загружена, $zip = new ZipArchive(); должен создать объект.
Вообще ситуация странная. Если хотите, отправьте мне скрипт по email, попробую запустить у себя.
пользуйтесь онлайн сервисом OnlineZIP.cn для создания архивов и отправки его на любой мейл
[...] Создание zip архивов с помощью PHP скрипта [...]
Внедрил скрипт, всё вроде хорошо работает, но если размер архива достигает 128кб, возвращаетса битый архив… счем может быть связана проблемма?
Возможная причина - ограничение времени выполнения скрипта или максимального объема памяти.
Настройки в php.ini:
memory_limit
max_execution_time