Привет! В этой записи я опишу как производится работа с Zip в PHP.
Рассмотрим некоторые случаи использования Zip в PHP:
- архивирование файла
- архивирование папки
- распаковка zip архива
Для работы представленных примеров должно быть включено расширение php_zip.
Архивирование файла в Zip на PHP
Создаем архив, добавляем в него файлы, а затем закрываем архив.
$zip = new ZipArchive(); $zip->open('path/to/zipfile.zip', ZipArchive::CREATE); $zip->addFile('some-file.pdf', 'subdir/filename.pdf'); $zip->addFile('another-file.xlxs', 'filename.xlxs'); $zip->close();
Архивирование папки в Zip на PHP
Для архивирования папки можно воспользоваться такой функцией:
public static function zip($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\\', DIRECTORY_SEPARATOR, realpath($source)); $source = str_replace('/', DIRECTORY_SEPARATOR, $source); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', DIRECTORY_SEPARATOR, $file); $file = str_replace('/', DIRECTORY_SEPARATOR, $file); if ($file == '.' || $file == '..' || empty($file) || $file == DIRECTORY_SEPARATOR) { continue; } // Ignore "." and ".." folders if (in_array(substr($file, strrpos($file, DIRECTORY_SEPARATOR) + 1), array('.', '..'))) { continue; } $file = realpath($file); $file = str_replace('\\', DIRECTORY_SEPARATOR, $file); $file = str_replace('/', DIRECTORY_SEPARATOR, $file); if (is_dir($file) === true) { $d = str_replace($source . DIRECTORY_SEPARATOR, '', $file); if (empty($d)) { continue; } $zip->addEmptyDir($d); } elseif (is_file($file) === true) { $zip->addFromString(str_replace($source . DIRECTORY_SEPARATOR, '', $file), file_get_contents($file)); } else { // do nothing } } } elseif (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); }
Указываем папку и куда положить архив:
zip('/folder/to/compress/', './compressed.zip');
Распаковка Zip архива на PHP
Указываем файл архива и папку для его распаковки:
$zip = new ZipArchive; $res = $zip->open('file.zip'); if ($res === TRUE) { $zip->extractTo('/myzips/extract_path/'); $zip->close(); }
Работа с Zip в PHP не составит трудностей, особенно для наличии этой статьи 🙂 Расширение php_zip облегчает жизнь разработчикам, которые столкнулись с необходимостью реализовать работу с архивами в PHP скриптах.
8276