Класс ZipArchive позволяет быстро и удобно работать с ZIP-архивам, рассмотрим основные возможности класса.
В примере используются константы:
ZipArchive::CREATE
– создавать архив, если он не существуетZipArchive::OVERWRITE
– если архив существует, то игнорировать текущее его содержимое т.е. работать как с пустым архивом.
$zip = new ZipArchive();
$zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE);
$zip->addFile(__DIR__ . '/image1.jpg', 'image1.jpg');
$zip->addFile(__DIR__ . '/image2.jpg', 'image2.jpg');
$zip->close();
Если файл необходимо поместить в директорию, то предварительно не нужно создавать пустую папку. Можно просто указать путь и имя файла, например «src»:
$zip->addFile(__DIR__ . '/image1.jpg', 'src/image1.jpg');
$zip->addFile(__DIR__ . '/image2.jpg', 'src/image2.jpg');
Если текстовой файл генерится прямо в скрипте, то удобней скинуть его в архив методом addFromString()
.
Сделать архив сайта можно с помощью рекурсивной функции, функция обойдет все файлы в директориях и добавит их в архив.
function addFileRecursion($zip, $dir, $start = '')
{
if (empty($start)) {
$start = $dir;
}
if ($objs = glob($dir . '/*')) {
foreach($objs as $obj) {
if (is_dir($obj)) {
addFileRecursion($zip, $obj, $start);
} else {
$zip->addFile($obj, str_replace(dirname($start) . '/', '', $obj));
}
}
}
}
$zip = new ZipArchive();
$zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE);
addFileRecursion($zip, __DIR__ . '/test');
$zip->close();
$zip = new ZipArchive();
$zip->open(__DIR__ . '/archive.zip');
$zip->renameName('image2.jpg', 'images.jpg');
$zip->close();
Если файл лежит в папке
$zip = new ZipArchive();
$zip->open(__DIR__ . '/archive.zip');
$zip->deleteName('image2.jpg');
$zip->close();
Если файл лежит в папке
$zip = new ZipArchive();
$zip->open(__DIR__ . '/archive.zip');
$i = 0;
$list = array();
while($name = $zip->getNameIndex($i)) {
$list[$i] = $name;
$i++;
}
print_r($list);
$zip->close();
Array
(
[0] => src/image1.jpg
[1] => src/image2.jpg
[2] => file.log
)
Данный метод удобен если требуется только прочитать содержимое файла.
$zip->addFromString($newFileName, file_get_contents($filePath));