Курилка.co.ua
Orphus RSS kurilka.co.ua

Category

Archives

PHP архивация файлов в формате ZIP

Author wmas wmas | Category Category PHP

Здравствуйте, уважаемые посетители моего блога Курилка.co.ua. Ничто не стоит на месте и такой язык программирования как PHP активно развивается. Если вам необходимо работать с ZIP архивами файлов, вы можете воспользоваться классом ZipArchive. Тем не менее, старые и проверенные временем решения не утратили своей привлекательности.

Но все по порядку. В начале, давайте попытаемся ответить на вопрос: «Что такое zip-архив?»

Zip — популярный формат сжатия данных и архивации файлов. Файл ZIP, чаще всего имеющий расширение .zip, хранит в сжатом или несжатом виде один или несколько файлов, которые можно из него извлечь путём распаковки с помощью специальной программы.

Этот формат был разработан Филом Кацем для использования в программе PKZIP. Впоследствии появилось множество других утилит, создающих файл в таком же формате. Если вас заинтересовал этот вопрос, советую ознакомить с соответствующей статьёй в Википедии.

Ну а теперь к делу. Иногда бывает необходимо хранить файлы в архивах. С одной стороны они меньше по объёму, с другой несколько файлов можно поместить в один. Конечно, для архивации файлов можно воспользоваться специальным программным обеспечением, к примеру WinZip или 7-zip, но в некоторых случаях имеет смысл автоматизировать процесс. В данной заметке мы поговорим о такой штуке как Zip file creation class — класс найденный мной в сборке phpMyAdmin.

Не вдаваясь в подробности, рассмотрим основные его функции:

addFile($data, $name, $time=0)

Описание: добавление файла в архив.
Параметры:

  • $data – содержание файла
  • $name – имя файла в архиве, может содержать путь
  • $time – временная метка (timestamp), по умолчание текущая (не обязательный параметр)

file()

Описание: архивирует и возвращает заархивированные данные в виде строки.

Для наглядности работы с классом приведу небольшой пример:

<?php
include zip.lib.php
$data = "текст файла";
$name = "filename.txt";
$zipfile = new zipfile();
$zipfile->addFile($data, $name);
$zipdata = $zipfile->file();
$fp = fopen ("filename.zip", "w+");
fwrite($fp, $zipdata);
fclose($fp);
?>

Как вы видите, здесь мы создали объект $zipfile, заархивировали данные $data функцией addFile как файл filename.txt и получили архивированные данные функцией file(), которые сохранили как файл filename.zip.

К слову, если вы хотите сохранить файл с кириллическими именами, не забудьте сконвертировать их в досовскую кодировку cp866, к примеру так (за подсказку спасибо Александру):

$filename = iconv('windows-1251', 'cp866', $filename);

download Zip file creation class

download Zip file creation class

Publish: Четверг Янв 28, 2010

11 Responses for "PHP архивация файлов в формате ZIP"

feed for comments on this post

  • Комментарий #1527 author: Zigmund Reply
    publish: Понедельник Мар 31, 2008 at 1:29 пп

    А как можно указать кодировку для архива ??? А то когда архивирую файлы с названиями на русском он в архиве кабрязульки выдаёт !
    Как можно исправить подобное недразумение ????

  • Комментарий #1528 author: wmas Reply
    publish: Понедельник Мар 31, 2008 at 2:38 пп

    2Zigmund: hi! Наверное, добавлять файлы таки с латинскими буквами. Можно использовать транслит :roll:

  • Комментарий #1551 author: Canadian pharmacy Reply
    publish: Понедельник Апр 14, 2008 at 6:51 пп

    Я думаю кодировку надо указывать не для архива а для веб страницы или я вас не правильно понял…

  • Комментарий #1553 author: wmas Reply
    publish: Понедельник Апр 14, 2008 at 8:39 пп

    2Canadian pharmacy: вроде о проблеме с кодировкой содержания файла не идет. Речь о названиях файла(ов) ;-)

  • Комментарий #1555 author: Vektor Reply
    publish: Четверг Апр 17, 2008 at 2:40 пп

    Вопрос: А как можно засунуть в архив более одного файла?

  • Комментарий #1556 author: wmas Reply
    publish: Четверг Апр 17, 2008 at 3:11 пп

    2Vektor: если не ошибаюсь, то просто несколько раз используйте $zipfile->addFile($data, $name);

  • Комментарий #2138 author: Александр Reply
    publish: Вторник Фев 3, 2009 at 10:41 дп

    а чтобы кобрязулек не было в имени файла нада имя файла в дос конверить iconv(‘windows-1251′,’cp866′, «Имя файла»)

    а кодировка содержимого тута не причем

  • Комментарий #2140 author: wmas Reply
    publish: Вторник Фев 3, 2009 at 12:49 пп

    2Александр: hi! Спасибо за подсказку! ;-)

  • Комментарий #2359 author: дядя Рома Reply (subscribed to comments)
    publish: Среда Июл 22, 2009 at 2:46 пп

    для больших архивов не покатит

  • Комментарий #2403 author: English Reply
    publish: Среда Авг 26, 2009 at 10:43 пп

    Ух ты, а классно объяснено :-D кратёхонько и доходчиво, спасибо вам большое, позаимствовал :-D

  • Комментарий #2814 author: Иван Reply
    publish: Вторник Май 3, 2011 at 11:55 дп

    Супер! Спасибо! Можно в один архив много файлов записывать, все очень просто.


Popular links

Copyright © since 2006 Курилка.co.ua,
powered by WordPress