Для начала хочу посоветовать ознакомится с тем как сделать 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.
Спасибо, стараемся 🙂