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

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

<?php
// Подключаем класс для работы с 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);
?>

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

<?php
/**
 * Распаковывает zip-архив в указанный каталог.
 * $dir  - полный путь к каталогу.
 * $file - полный путь к zip-архиву.
 * $log  - флаг вывода диагностики.
 */

function unpackZip($dir, $file, $log=0) {
    if ($log) echo "Start unpack [$file] into [$dir] directory... <br/>";
 
    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 "   <b>unpack </b>: $name <br/>";
 
                // последний символ имени
                $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;
}
?>

Ссылки по теме:

Один комментарий

  1. Spider:

    А как же стандартный ZipArchive?

Оставьте свой отзыв