Создание zip-архива на лету

Для начала хочу посоветовать ознакомится с тем как сделать StdClass — из обычного массива.
На одном проекте мне понадобилось периодически создавать zip-архивы из файлов. Для этого можно воспользоваться классом, написанным Rochak Chauhan, который я скачал с PHP Classes. Но захотелось пойти дальше и получить возможность архивировать папки целиком. Для этого можно воспользоваться новым классом, который будет наследоваться от класса, упаковывающего файлы.

Код класса получается коротенький:

<?php
class createDirZip extends createZip {

  function get_files_from_folder($directory, $put_into) {
    if ($handle = opendir($directory)) {
      while (false !== ($file = readdir($handle))) {
        if (is_file($directory.$file)) {
          $fileContents = file_get_contents($directory.$file);
          $this->addFile($fileContents, $put_into.$file);
        } elseif ($file != '.' and $file != '..' and is_dir($directory.$file)) {
          $this->addDirectory($put_into.$file.'/');
          $this->get_files_from_folder($directory.$file.'/', $put_into.$file.'/');
        }
      }
    }
    closedir($handle);
  }
}
?>

Здесь мы используем функции opendir и readdir, чтобы получить содержимое папок. Теперь мы можем использовать наш класс, и заархивировать, например папку folder_example. Делается это так:

<?php
require_once('createzip.php');
require_once('createzipfromdir.php');
$createZip = new createDirZip;
$createZip->get_files_from_folder('folder_example/', '');

$fileName = 'archive.zip';
$fd = fopen ($fileName, 'wb');
$out = fwrite ($fd, $createZip->getZippedfile());
fclose ($fd);

$createZip->forceDownload($fileName);
?>


Скачать архив можно тут — Создаем zip на php.

Создание zip-архива на лету: 1 комментарий

Обсуждение закрыто.