Работа с архивами средствами PHP

Как архивировать в формате zip PHP написано в статье: http://blog.webmasterschool.ru/php/48/

На http://www.phpclasses.org можно скачать класс Create ZIP File, предназначенный для создания zip-файлов с иерархией папок. Пример использования:

// Подключаем класс для работы с zip-архивами
include_once(«createZip.inc.php»);
$createZip = new createZip;

// Добавляем директорию
$createZip -> addDirectory(«dir/»);

// Добавляем файл
$fileContents = file_get_contents(«img.jpg»);
$createZip -> addFile($fileContents, «dir/img.jpg»);

// Создаем архив
$fileName = «archive.zip»;
$fd = fopen ($fileName, «wb»);
$out = fwrite ($fd, $createZip -> getZippedfile());
fclose ($fd);

// Отдаем архив браузеру
$createZip -> forceDownload($fileName);
@unlink($fileName);
?>

Функция для извлечения файлов из архива:

/**
* Распаковывает zip-архив в указанный каталог.
* $dir — полный путь к каталогу.
* $file — полный путь к zip-архиву.
* $log — флаг вывода диагностики.
*/
function unpackZip($dir, $file, $log=0) {
if ($log) echo «Start unpack [$file] into [$dir] directory…
«;

if ($zip = zip_open($file)) {
if ($zip) {
// создать каталог, если он не существует
if (! file_exists($dir)) mkdir($dir);

while ($zip_entry = zip_read($zip)) {
$name = zip_entry_name($zip_entry);
if ($log) echo » unpack : $name
«;

// последний символ имени
$last = substr($name, strlen($name)-1);

// если это каталог
if ($last == «/» || $last == «\\») {
$subdir = $dir.»/».$name;
// создать каталог, если он не существует
if (! file_exists($subdir)) mkdir ($subdir);
} else {
// распаковать файл
if (zip_entry_open($zip, $zip_entry, «r»)) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$fp = fopen($dir.»/».zip_entry_name($zip_entry), «w»);
fwrite($fp, $buf);
zip_entry_close($zip_entry);
} else {
return false;
}
}
}
zip_close($zip);
}
} else {
return false;
}

return true;
}
?>

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *