{"id":20282287,"url":"https://github.com/ne-lexa/php-zip","last_synced_at":"2025-05-14T04:09:40.509Z","repository":{"id":45474222,"uuid":"67720236","full_name":"Ne-Lexa/php-zip","owner":"Ne-Lexa","description":"PhpZip is a php-library for extended work with ZIP-archives.","archived":false,"fork":false,"pushed_at":"2024-11-10T19:53:08.000Z","size":3150,"stargazers_count":495,"open_issues_count":30,"forks_count":59,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-12T11:55:28.016Z","etag":null,"topics":["archive","extract","php","php-library","unzip","winzip","zip","zipalign","ziparchive"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ne-Lexa.png","metadata":{"files":{"readme":"README.RU.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-08T16:20:48.000Z","updated_at":"2025-04-12T08:40:11.000Z","dependencies_parsed_at":"2024-12-12T18:13:54.801Z","dependency_job_id":"edf1a3c1-69ef-47f9-9d48-bfac6abd65e0","html_url":"https://github.com/Ne-Lexa/php-zip","commit_stats":{"total_commits":147,"total_committers":11,"mean_commits":"13.363636363636363","dds":0.08843537414965985,"last_synced_commit":"330c724ce6980a7ae0e00e0e7072893282644c6f"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ne-Lexa%2Fphp-zip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ne-Lexa%2Fphp-zip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ne-Lexa%2Fphp-zip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ne-Lexa%2Fphp-zip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ne-Lexa","download_url":"https://codeload.github.com/Ne-Lexa/php-zip/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254070107,"owners_count":22009559,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archive","extract","php","php-library","unzip","winzip","zip","zipalign","ziparchive"],"created_at":"2024-11-14T14:08:49.772Z","updated_at":"2025-05-14T04:09:35.494Z","avatar_url":"https://github.com/Ne-Lexa.png","language":"PHP","readme":"\u003ch1 align=\"center\"\u003e\u003cimg src=\"logo.svg\" alt=\"PhpZip\" width=\"250\" height=\"51\"\u003e\u003c/h1\u003e\n\n`PhpZip` - php библиотека для продвинутой работы с ZIP-архивами.\n\n[![Packagist Version](https://img.shields.io/packagist/v/nelexa/zip.svg)](https://packagist.org/packages/nelexa/zip)\n[![Packagist Downloads](https://img.shields.io/packagist/dt/nelexa/zip.svg?color=%23ff007f)](https://packagist.org/packages/nelexa/zip)\n[![Code Coverage](https://scrutinizer-ci.com/g/Ne-Lexa/php-zip/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/Ne-Lexa/php-zip/?branch=master)\n[![Build Status](https://github.com/Ne-Lexa/php-zip/workflows/build/badge.svg)](https://github.com/Ne-Lexa/php-zip/actions)\n[![License](https://img.shields.io/packagist/l/nelexa/zip.svg)](https://github.com/Ne-Lexa/php-zip/blob/master/LICENSE)\n\n\n[English Documentation](README.md)\n\nСодержание\n----------\n- [Функционал](#функционал)\n- [Требования](#требования)\n- [Установка](#установка)\n- [Примеры](#примеры)\n- [Глоссарий](#глоссарий)\n- [Документация](#документация)\n  + [Обзор методов класса `\\PhpZip\\ZipFile`](#обзор-методов-класса-phpzipzipfile)\n  + [Создание/Открытие ZIP-архива](#созданиеоткрытие-zip-архива)\n  + [Чтение записей из архива](#чтение-записей-из-архива)\n  + [Перебор записей/Итератор](#перебор-записейитератор)\n  + [Получение информации о записях](#получение-информации-о-записях)\n  + [Добавление записей в архив](#добавление-записей-в-архив)\n  + [Удаление записей из архива](#удаление-записей-из-архива)\n  + [Работа с записями и с архивом](#работа-с-записями-и-с-архивом)\n  + [Работа с паролями](#работа-с-паролями)\n  + [Отмена изменений](#отмена-изменений)\n  + [Сохранение файла или вывод в браузер](#сохранение-файла-или-вывод-в-браузер)\n  + [Закрытие архива](#закрытие-архива)\n- [Запуск тестов](#запуск-тестов)\n- [История изменений](#история-изменений)\n- [Обновление версий](#обновление-версий)\n  + [Обновление с версии 3 до версии 4](#обновление-с-версии-3-до-версии-4)\n  + [Обновление с версии 2 до версии 3](#обновление-с-версии-2-до-версии-3)\n\n### Функционал\n- Открытие и разархивирование ZIP-архивов.\n- Создание ZIP-архивов.\n- Модификация ZIP-архивов.\n- Чистый php (не требуется расширение `php-zip` и класс `\\ZipArchive`).\n- Поддерживается сохранение архива в файл, вывод архива в браузер или вывод в виде строки, без сохранения в файл.\n- Поддерживаются комментарии архива и комментарии отдельных записей.\n- Получение подробной информации о каждой записи в архиве.\n- Поддерживаются только следующие методы сжатия:\n  + Без сжатия (Stored).\n  + Deflate сжатие.\n  + BZIP2 сжатие при наличии расширения `php-bz2`.\n- Поддержка `ZIP64` (размер файла более 4 GB или количество записей в архиве более 65535).\n- Работа с паролями\n  \u003e **Внимание!**\n  \u003e\n  \u003e Для 32-bit систем, в данный момент не поддерживается метод шифрование `Traditional PKWARE Encryption (ZipCrypto)`. \n  \u003e Используйте метод шифрования `WinZIP AES Encryption`, когда это возможно.\n  + Установка пароля для чтения архива глобально или для некоторых записей.\n  + Изменение пароля архива, в том числе и для отдельных записей.\n  + Удаление пароля архива глобально или для отдельных записей.\n  + Установка пароля и/или метода шифрования, как для всех, так и для отдельных записей в архиве.\n  + Установка разных паролей и методов шифрования для разных записей.\n  + Удаление пароля для всех или для некоторых записей.\n  + Поддержка методов шифрования `Traditional PKWARE Encryption (ZipCrypto)` и `WinZIP AES Encryption (128, 192 или 256 bit)`.\n  + Установка метода шифрования для всех или для отдельных записей в архиве.\n\n### Требования\n- `PHP` 7.4 или ^8.0 (предпочтительно 64-bit).\n- Опционально php-расширение `bzip2` для поддержки BZIP2 компрессии.\n- Опционально php-расширение `openssl` для `WinZip Aes Encryption` шифрования.\n\n### Установка\n`composer require nelexa/zip`\n\nПоследняя стабильная версия: [![Latest Stable Version](https://poser.pugx.org/nelexa/zip/v/stable)](https://packagist.org/packages/nelexa/zip)\n\n### Примеры\n```php\n// создание нового архива\n$zipFile = new \\PhpZip\\ZipFile();\ntry{\n    $zipFile\n        -\u003eaddFromString('zip/entry/filename', \"Is file content\") // добавить запись из строки\n        -\u003eaddFile('/path/to/file', 'data/tofile') // добавить запись из файла\n        -\u003eaddDir(__DIR__, 'to/path/') // добавить файлы из директории\n        -\u003esaveAsFile($outputFilename) // сохранить архив в файл\n        -\u003eclose(); // закрыть архив\n            \n    // открытие архива, извлечение файлов, удаление файлов, добавление файлов, установка пароля и вывод архива в браузер.\n    $zipFile\n        -\u003eopenFile($outputFilename) // открыть архив из файла\n        -\u003eextractTo($outputDirExtract) // извлечь файлы в заданную директорию\n        -\u003edeleteFromRegex('~^\\.~') // удалить все скрытые (Unix) файлы\n        -\u003eaddFromString('dir/file.txt', 'Test file') // добавить новую запись из строки\n        -\u003esetPassword('password') // установить пароль на все записи\n        -\u003eoutputAsAttachment('library.jar'); // вывести в браузер без сохранения в файл\n}\ncatch(\\PhpZip\\Exception\\ZipException $e){\n    // обработка исключения\n}\nfinally{\n    $zipFile-\u003eclose();\n}\n```\nДругие примеры можно посмотреть в папке `tests/`.\n\n### Глоссарий\n**Запись в ZIP-архиве (Zip Entry)** - файл или папка в ZIP-архиве. У каждой записи в архиве есть определённые свойства, например: имя файла, метод сжатия, метод шифрования, размер файла до сжатия, размер файла после сжатия, CRC32 и другие.\n\n### Документация\n#### Обзор методов класса `\\PhpZip\\ZipFile`\n- [ZipFile::__construct](#zipfile__construct) - инициализирует ZIP-архив.\n- [ZipFile::addAll](#zipfileaddall) - добавляет все записи из массива.\n- [ZipFile::addDir](#zipfileadddir) - добавляет файлы из директории по указанному пути без вложенных директорий.\n- [ZipFile::addDirRecursive](#zipfileadddirrecursive) - добавляет файлы из директории по указанному пути с вложенными директориями.\n- [ZipFile::addEmptyDir](#zipfileaddemptydir) - добавляет в ZIP-архив новую директорию.\n- [ZipFile::addFile](#zipfileaddfile) - добавляет в ZIP-архив файл по указанному пути.\n- [ZipFile::addSplFile](#zipfileaddsplfile) - добавляет объект `\\SplFileInfo` в zip-архив.\n- [ZipFile::addFromFinder](#zipfileaddfromfinder) - добавляет файлы из `Symfony\\Component\\Finder\\Finder` в zip архив.\n- [ZipFile::addFilesFromIterator](#zipfileaddfilesfromiterator) - добавляет файлы из итератора директорий.\n- [ZipFile::addFilesFromGlob](#zipfileaddfilesfromglob) - добавляет файлы из директории в соответствии с glob шаблоном без вложенных директорий.\n- [ZipFile::addFilesFromGlobRecursive](#zipfileaddfilesfromglobrecursive) - добавляет файлы из директории в соответствии с glob шаблоном c вложенными директориями.\n- [ZipFile::addFilesFromRegex](#zipfileaddfilesfromregex) - добавляет файлы из директории в соответствии с регулярным выражением без вложенных директорий.\n- [ZipFile::addFilesFromRegexRecursive](#zipfileaddfilesfromregexrecursive) - добавляет файлы из директории в соответствии с регулярным выражением с вложенными директориями.\n- [ZipFile::addFromStream](#zipfileaddfromstream) - добавляет в ZIP-архив запись из потока.\n- [ZipFile::addFromString](#zipfileaddfromstring) - добавляет файл в ZIP-архив, используя его содержимое в виде строки.\n- [ZipFile::close](#zipfileclose) - закрывает ZIP-архив.\n- [ZipFile::count](#zipfilecount) - возвращает количество записей в архиве.\n- [ZipFile::deleteFromName](#zipfiledeletefromname) - удаляет запись по имени.\n- [ZipFile::deleteFromGlob](#zipfiledeletefromglob) - удаляет записи в соответствии с glob шаблоном.\n- [ZipFile::deleteFromRegex](#zipfiledeletefromregex) - удаляет записи в соответствии с регулярным выражением.\n- [ZipFile::deleteAll](#zipfiledeleteall) - удаляет все записи в ZIP-архиве.\n- [ZipFile::disableEncryption](#zipfiledisableencryption) - отключает шифрования всех записей, находящихся в архиве.\n- [ZipFile::disableEncryptionEntry](#zipfiledisableencryptionentry) - отключает шифрование записи по её имени.\n- [ZipFile::extractTo](#zipfileextractto) - извлекает содержимое архива в заданную директорию.\n- [ZipFile::getArchiveComment](#zipfilegetarchivecomment) - возвращает комментарий ZIP-архива.\n- [ZipFile::getEntryComment](#zipfilegetentrycomment) - возвращает комментарий к записи, используя её имя.\n- [ZipFile::getEntryContent](#zipfilegetentrycontent) - возвращает содержимое записи.\n- [ZipFile::getListFiles](#zipfilegetlistfiles) - возвращает список файлов архива.\n- [ZipFile::hasEntry](#zipfilehasentry) - проверяет, присутствует ли запись в архиве.\n- [ZipFile::isDirectory](#zipfileisdirectory) - проверяет, является ли запись в архиве директорией.\n- [ZipFile::matcher](#zipfilematcher) - выборка записей в архиве для проведения операций над выбранными записями.\n- [ZipFile::openFile](#zipfileopenfile) - открывает ZIP-архив из файла.\n- [ZipFile::openFromString](#zipfileopenfromstring) - открывает ZIP-архив из строки.\n- [ZipFile::openFromStream](#zipfileopenfromstream) - открывает ZIP-архив из потока.\n- [ZipFile::outputAsAttachment](#zipfileoutputasattachment) - выводит ZIP-архив в браузер.\n- [ZipFile::outputAsPsr7Response](#zipfileoutputaspsr7response) - выводит ZIP-архив, как PSR-7 Response.\n- [ZipFile::outputAsSymfonyResponse](#zipfileoutputassymfonyresponse) - выводит ZIP-архив, как Symfony Response.\n- [ZipFile::outputAsString](#zipfileoutputasstring) - выводит ZIP-архив в виде строки.\n- [ZipFile::rename](#zipfilerename) - переименовывает запись по имени.\n- [ZipFile::rewrite](#zipfilerewrite) - сохраняет изменения и заново открывает изменившийся архив.\n- [ZipFile::saveAsFile](#zipfilesaveasfile) - сохраняет архив в файл.\n- [ZipFile::saveAsStream](#zipfilesaveasstream) - записывает архив в поток.\n- [ZipFile::setArchiveComment](#zipfilesetarchivecomment) - устанавливает комментарий к ZIP-архиву.\n- [ZipFile::setCompressionLevel](#zipfilesetcompressionlevel) - устанавливает уровень сжатия для всех файлов, находящихся в архиве.\n- [ZipFile::setCompressionLevelEntry](#zipfilesetcompressionlevelentry) - устанавливает уровень сжатия для определённой записи в архиве.\n- [ZipFile::setCompressionMethodEntry](#zipfilesetcompressionmethodentry) - устанавливает метод сжатия для определённой записи в архиве.\n- [ZipFile::setEntryComment](#zipfilesetentrycomment) - устанавливает комментарий к записи, используя её имя.\n- [ZipFile::setReadPassword](#zipfilesetreadpassword) - устанавливает пароль на чтение открытого запароленного архива для всех зашифрованных записей.\n- [ZipFile::setReadPasswordEntry](#zipfilesetreadpasswordentry) - устанавливает пароль на чтение конкретной зашифрованной записи открытого запароленного архива.\n- [ZipFile::setPassword](#zipfilesetpassword) - устанавливает новый пароль для всех файлов, находящихся в архиве.\n- [ZipFile::setPasswordEntry](#zipfilesetpasswordentry) - устанавливает новый пароль для конкретного файла.\n- [ZipFile::unchangeAll](#zipfileunchangeall) - отменяет все изменения, сделанные в архиве.\n- [ZipFile::unchangeArchiveComment](#zipfileunchangearchivecomment) - отменяет изменения в комментарии к архиву.\n- [ZipFile::unchangeEntry](#zipfileunchangeentry) - отменяет изменения для конкретной записи архива.\n\n#### Создание/Открытие ZIP-архива\n##### ZipFile::__construct\nИнициализирует ZIP-архив.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n```\n##### ZipFile::openFile\nОткрывает ZIP-архив из файла.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eopenFile('file.zip');\n```\n##### ZipFile::openFromString\nОткрывает ZIP-архив из строки.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eopenFromString($stringContents);\n```\n##### ZipFile::openFromStream\nОткрывает ZIP-архив из потока.\n```php\n$stream = fopen('file.zip', 'rb');\n\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eopenFromStream($stream);\n```\n#### Чтение записей из архива\n##### ZipFile::count\nВозвращает количество записей в архиве.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n\n$count = count($zipFile);\n// или\n$count = $zipFile-\u003ecount();\n```\n##### ZipFile::getListFiles\nВозвращает список файлов архива.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n$listFiles = $zipFile-\u003egetListFiles();\n\n// Пример содержимого массива:\n// array (\n//   0 =\u003e 'info.txt',\n//   1 =\u003e 'path/to/file.jpg',\n//   2 =\u003e 'another path/',\n// )\n```\n##### ZipFile::getEntryContent\nВозвращает содержимое записи.\n```php\n// $entryName = 'path/to/example-entry-name.txt';\n$zipFile = new \\PhpZip\\ZipFile();\n\n$contents = $zipFile[$entryName];\n// или\n$contents = $zipFile-\u003egetEntryContents($entryName);\n```\n##### ZipFile::hasEntry\nПроверяет, присутствует ли запись в архиве.\n```php\n// $entryName = 'path/to/example-entry-name.txt';\n$zipFile = new \\PhpZip\\ZipFile();\n\n$hasEntry = isset($zipFile[$entryName]);\n// или\n$hasEntry = $zipFile-\u003ehasEntry($entryName);\n```\n##### ZipFile::isDirectory\nПроверяет, является ли запись в архиве директорией.\n```php\n// $entryName = 'path/to/';\n$zipFile = new \\PhpZip\\ZipFile();\n\n$isDirectory = $zipFile-\u003eisDirectory($entryName);\n```\n##### ZipFile::extractTo\nИзвлекает содержимое архива в заданную директорию.\nДиректория должна существовать.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eextractTo($directory);\n```\nМожно извлечь только некоторые записи в заданную директорию.\nДиректория должна существовать.\n```php\n$extractOnlyFiles = [\n    'filename1', \n    'filename2', \n    'dir/dir/dir/'\n];\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eextractTo($toDirectory, $extractOnlyFiles);\n```\n#### Перебор записей/Итератор\n`ZipFile` является итератором.\nМожно перебрать все записи, через цикл `foreach`.\n```php\nforeach($zipFile as $entryName =\u003e $contents){\n    echo \"Файл: $entryName\" . PHP_EOL;\n    echo \"Содержимое: $contents\" . PHP_EOL;\n    echo '-----------------------------' . PHP_EOL;\n}\n```\nМожно использовать паттерн `Iterator`.\n```php\n$iterator = new \\ArrayIterator($zipFile);\nwhile ($iterator-\u003evalid())\n{\n    $entryName = $iterator-\u003ekey();\n    $contents = $iterator-\u003ecurrent();\n\n    echo \"Файл: $entryName\" . PHP_EOL;\n    echo \"Содержимое: $contents\" . PHP_EOL;\n    echo '-----------------------------' . PHP_EOL;\n\n    $iterator-\u003enext();\n}\n```\n#### Получение информации о записях\n##### ZipFile::getArchiveComment\nВозвращает комментарий ZIP-архива.\n```php\n$commentArchive = $zipFile-\u003egetArchiveComment();\n```\n##### ZipFile::getEntryComment\nВозвращает комментарий к записи, используя её имя.\n```php\n$commentEntry = $zipFile-\u003egetEntryComment($entryName);\n```\n#### Добавление записей в архив\n\nВсе методы добавления записей в ZIP-архив позволяют указать метод сжатия содержимого.\n\nДоступны следующие методы сжатия:\n- `\\PhpZip\\Constants\\ZipCompressionMethod::STORED` - без сжатия\n- `\\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED` - Deflate сжатие\n- `\\PhpZip\\Constants\\ZipCompressionMethod::BZIP2` - Bzip2 сжатие при наличии расширения `ext-bz2`\n\n##### ZipFile::addFile\nДобавляет в ZIP-архив файл по указанному пути из файловой системы.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n// $file = '...../file.ext'; \n$zipFile-\u003eaddFile($file);\n\n// можно указать имя записи в архиве (если null, то используется последний компонент из имени файла)\n$zipFile-\u003eaddFile($file, $entryName);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFile($file, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFile($file, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFile($file, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addSplFile\"\nДобавляет объект `\\SplFileInfo` в zip-архив.\n```php\n// $file = '...../file.ext'; \n// $entryName = 'file2.ext'\n$zipFile = new \\PhpZip\\ZipFile();\n\n$splFile = new \\SplFileInfo('README.md');\n\n$zipFile-\u003eaddSplFile($splFile);\n$zipFile-\u003eaddSplFile($splFile, $entryName);\n// or\n$zipFile[$entryName] = new \\SplFileInfo($file);\n\n// установить метод сжатия\n$zipFile-\u003eaddSplFile($splFile, $entryName, $options = [\n    \\PhpZip\\Constants\\ZipOptions::COMPRESSION_METHOD =\u003e \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED,\n]);\n```\n##### ZipFile::addFromFinder\"\nДобавляет файлы из [`Symfony\\Component\\Finder\\Finder`](https://symfony.com/doc/current/components/finder.html) в zip архив.\n```php\n$finder = new \\Symfony\\Component\\Finder\\Finder();\n$finder\n    -\u003efiles()\n    -\u003ename('*.{jpg,jpeg,gif,png}')\n    -\u003ename('/^[0-9a-f]\\./')\n    -\u003econtains('/lorem\\s+ipsum$/i')\n    -\u003ein('path');\n\n$zipFile = new \\PhpZip\\ZipFile();\n$zipFile-\u003eaddFromFinder($finder, $options = [\n    \\PhpZip\\Constants\\ZipOptions::COMPRESSION_METHOD =\u003e \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED,\n    \\PhpZip\\Constants\\ZipOptions::MODIFIED_TIME =\u003e new \\DateTimeImmutable('-1 day 5 min')\n]);\n```\n##### ZipFile::addFromString\nДобавляет файл в ZIP-архив, используя его содержимое в виде строки.\n```php\n$zipFile = new \\PhpZip\\ZipFile();\n\n$zipFile[$entryName] = $contents;\n// или\n$zipFile-\u003eaddFromString($entryName, $contents);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFromString($entryName, $contents, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFromString($entryName, $contents, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFromString($entryName, $contents, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addFromStream\nДобавляет в ZIP-архив запись из потока.\n```php\n// $stream = fopen(..., 'rb');\n\n$zipFile-\u003eaddFromStream($stream, $entryName);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFromStream($stream, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFromStream($stream, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFromStream($stream, $entryName, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addEmptyDir\nДобавляет в ZIP-архив новую (пустую) директорию.\n```php\n// $path = \"path/to/\";\n\n$zipFile-\u003eaddEmptyDir($path);\n// или\n$zipFile[$path] = null;\n```\n##### ZipFile::addAll\nДобавляет все записи из массива.\n```php\n$entries = [\n    'file.txt' =\u003e 'file contents', // запись из строки данных\n    'empty dir/' =\u003e null, // пустой каталог\n    'path/to/file.jpg' =\u003e fopen('..../filename', 'rb'), // запись из потока\n    'path/to/file.dat' =\u003e new \\SplFileInfo('..../filename'), // запись из файла\n];\n\n$zipFile-\u003eaddAll($entries);\n```\n##### ZipFile::addDir\nДобавляет файлы из директории по указанному пути без вложенных директорий.\n```php\n$zipFile-\u003eaddDir($dirName);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddDir($dirName, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddDir($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddDir($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddDir($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addDirRecursive\nДобавляет файлы из директории по указанному пути c вложенными директориями.\n```php\n$zipFile-\u003eaddDirRecursive($dirName);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddDirRecursive($dirName, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddDirRecursive($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddDirRecursive($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddDirRecursive($dirName, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addFilesFromIterator\nДобавляет файлы из итератора директорий.\n```php\n// $directoryIterator = new \\DirectoryIterator($dir); // без вложенных директорий\n// $directoryIterator = new \\RecursiveDirectoryIterator($dir); // с вложенными директориями\n\n$zipFile-\u003eaddFilesFromIterator($directoryIterator);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddFilesFromIterator($directoryIterator, $localPath);\n// или\n$zipFile[$localPath] = $directoryIterator;\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFilesFromIterator($directoryIterator, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFilesFromIterator($directoryIterator, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFilesFromIterator($directoryIterator, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\nПример добавления файлов из директории в архив с игнорированием некоторых файлов при помощи итератора директорий.\n```php\n$ignoreFiles = [\n    \"file_ignore.txt\", \n    \"dir_ignore/sub dir ignore/\"\n];\n\n// $directoryIterator = new \\DirectoryIterator($dir); // без вложенных директорий\n// $directoryIterator = new \\RecursiveDirectoryIterator($dir); // с вложенными директориями\n \n// используйте \\PhpZip\\Util\\Iterator\\IgnoreFilesFilterIterator для не рекурсивного поиска\n$ignoreIterator = new \\PhpZip\\Util\\Iterator\\IgnoreFilesRecursiveFilterIterator(\n    $directoryIterator, \n    $ignoreFiles\n);\n\n$zipFile-\u003eaddFilesFromIterator($ignoreIterator);\n```\n##### ZipFile::addFilesFromGlob\nДобавляет файлы из директории в соответствии с [glob шаблоном](https://en.wikipedia.org/wiki/Glob_(programming)) без вложенных директорий.\n```php\n$globPattern = '**.{jpg,jpeg,png,gif}'; // пример glob шаблона -\u003e добавить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003eaddFilesFromGlob($dir, $globPattern);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddFilesFromGlob($dir, $globPattern, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFilesFromGlob($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFilesFromGlob($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFilesFromGlob($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addFilesFromGlobRecursive\nДобавляет файлы из директории в соответствии с [glob шаблоном](https://en.wikipedia.org/wiki/Glob_(programming)) c вложенными директориями.\n```php\n$globPattern = '**.{jpg,jpeg,png,gif}'; // пример glob шаблона -\u003e добавить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003eaddFilesFromGlobRecursive($dir, $globPattern);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddFilesFromGlobRecursive($dir, $globPattern, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFilesFromGlobRecursive($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFilesFromGlobRecursive($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFilesFromGlobRecursive($dir, $globPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addFilesFromRegex\nДобавляет файлы из директории в соответствии с [регулярным выражением](https://en.wikipedia.org/wiki/Regular_expression) без вложенных директорий.\n```php\n$regexPattern = '/\\.(jpe?g|png|gif)$/si'; // пример регулярного выражения -\u003e добавить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003eaddFilesFromRegex($dir, $regexPattern);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddFilesFromRegex($dir, $regexPattern, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFilesFromRegex($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFilesFromRegex($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFilesFromRegex($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n##### ZipFile::addFilesFromRegexRecursive\nДобавляет файлы из директории в соответствии с [регулярным выражением](https://en.wikipedia.org/wiki/Regular_expression) с вложенными директориями.\n```php\n$regexPattern = '/\\.(jpe?g|png|gif)$/si'; // пример регулярного выражения -\u003e добавить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003eaddFilesFromRegexRecursive($dir, $regexPattern);\n\n// можно указать путь в архиве в который необходимо поместить записи\n$localPath = \"to/path/\";\n$zipFile-\u003eaddFilesFromRegexRecursive($dir, $regexPattern, $localPath);\n\n// можно указать метод сжатия\n$zipFile-\u003eaddFilesFromRegexRecursive($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::STORED); // Без сжатия\n$zipFile-\u003eaddFilesFromRegexRecursive($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED); // Deflate сжатие\n$zipFile-\u003eaddFilesFromRegexRecursive($dir, $regexPattern, $localPath, \\PhpZip\\Constants\\ZipCompressionMethod::BZIP2); // BZIP2 сжатие\n```\n#### Удаление записей из архива\n##### ZipFile::deleteFromName\nУдаляет запись по имени.\n```php\n$zipFile-\u003edeleteFromName($entryName);\n```\n##### ZipFile::deleteFromGlob\nУдаляет записи в соответствии с [glob шаблоном](https://en.wikipedia.org/wiki/Glob_(programming)).\n```php\n$globPattern = '**.{jpg,jpeg,png,gif}'; // пример glob шаблона -\u003e удалить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003edeleteFromGlob($globPattern);\n```\n##### ZipFile::deleteFromRegex\nУдаляет записи в соответствии с [регулярным выражением](https://en.wikipedia.org/wiki/Regular_expression).\n```php\n$regexPattern = '/\\.(jpe?g|png|gif)$/si'; // пример регулярному выражения -\u003e удалить все .jpg, .jpeg, .png и .gif файлы\n\n$zipFile-\u003edeleteFromRegex($regexPattern);\n```\n##### ZipFile::deleteAll\nУдаляет все записи в ZIP-архиве.\n```php\n$zipFile-\u003edeleteAll();\n```\n#### Работа с записями и с архивом\n##### ZipFile::rename\nПереименовывает запись по имени.\n```php\n$zipFile-\u003erename($oldName, $newName);\n```\n##### ZipFile::setCompressionLevel\nУстанавливает уровень сжатия для всех файлов, находящихся в архиве.\n\n\u003e _Обратите внимание, что действие данного метода не распространяется на записи, добавленные после выполнения этого метода._\n\nПо умолчанию используется уровень сжатия 5 (`\\PhpZip\\Constants\\ZipCompressionLevel::NORMAL`) или уровень сжатия, определённый в архиве для Deflate сжатия.\n\nПоддерживаются диапазон значений от 1 (`\\PhpZip\\Constants\\ZipCompressionLevel::SUPER_FAST`) до 9 (`\\PhpZip\\Constants\\ZipCompressionLevel::MAXIMUM`). Чем выше число, тем лучше и дольше сжатие.\n```php\n$zipFile-\u003esetCompressionLevel(\\PhpZip\\Constants\\ZipCompressionLevel::MAXIMUM);\n```\n##### ZipFile::setCompressionLevelEntry\nУстанавливает уровень сжатия для определённой записи в архиве.\n\nПоддерживаются диапазон значений от 1 (`\\PhpZip\\Constants\\ZipCompressionLevel::SUPER_FAST`) до 9 (`\\PhpZip\\Constants\\ZipCompressionLevel::MAXIMUM`). Чем выше число, тем лучше и дольше сжатие.\n```php\n$zipFile-\u003esetCompressionLevelEntry($entryName, \\PhpZip\\Constants\\ZipCompressionLevel::MAXIMUM);\n```\n##### ZipFile::setCompressionMethodEntry\nУстанавливает метод сжатия для определённой записи в архиве.\n\nДоступны следующие методы сжатия:\n- `\\PhpZip\\Constants\\ZipCompressionMethod::STORED` - без сжатия\n- `\\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED` - Deflate сжатие\n- `\\PhpZip\\Constants\\ZipCompressionMethod::BZIP2` - Bzip2 сжатие при наличии расширения `ext-bz2`\n```php\n$zipFile-\u003esetCompressionMethodEntry($entryName, \\PhpZip\\Constants\\ZipCompressionMethod::DEFLATED);\n```\n##### ZipFile::setArchiveComment\nУстанавливает комментарий к ZIP-архиву.\n```php\n$zipFile-\u003esetArchiveComment($commentArchive);\n```\n##### ZipFile::setEntryComment\nУстанавливает комментарий к записи, используя её имя.\n```php\n$zipFile-\u003esetEntryComment($entryName, $comment);\n```\n##### ZipFile::matcher\nВыборка записей в архиве для проведения операций над выбранными записями.\n```php\n$matcher = $zipFile-\u003ematcher();\n```\nВыбор файлов из архива по одному:\n```php\n$matcher\n    -\u003eadd('entry name')\n    -\u003eadd('another entry');\n```\nВыбор нескольких файлов в архиве:\n```php\n$matcher-\u003eadd([\n    'entry name',\n    'another entry name',\n    'path/'\n]);\n```\nВыбор файлов по регулярному выражению:\n```php\n$matcher-\u003ematch('~\\.jpe?g$~i');\n```\nВыбор всех файлов в архиве:\n```php\n$matcher-\u003eall();\n```\ncount() - получает количество выбранных записей:\n```php\n$count = count($matcher);\n// или\n$count = $matcher-\u003ecount();\n```\ngetMatches() - получает список выбранных записей:\n```php\n$entries = $matcher-\u003egetMatches();\n// пример содержимого: ['entry name', 'another entry name'];\n```\ninvoke() - выполняет пользовательскую функцию над выбранными записями:\n```php\n// пример\n$matcher-\u003einvoke(function($entryName) use($zipFile) {\n    $newName = preg_replace('~\\.(jpe?g)$~i', '.no_optimize.$1', $entryName);\n    $zipFile-\u003erename($entryName, $newName);\n});\n```\nФункции для работы над выбранными записями:\n```php\n$matcher-\u003edelete(); // удалет выбранные записи из ZIP-архива\n$matcher-\u003esetPassword($password); // устанавливает новый пароль на выбранные записи\n$matcher-\u003esetPassword($password, $encryptionMethod); // устанавливает новый пароль и метод шифрования на выбранные записи\n$matcher-\u003esetEncryptionMethod($encryptionMethod); // устанавливает метод шифрования на выбранные записи\n$matcher-\u003edisableEncryption(); // отключает шифрование для выбранных записей\n```\n#### Работа с паролями\n\nРеализована поддержка методов шифрования:\n- `\\PhpZip\\Constants\\ZipEncryptionMethod::PKWARE` - Traditional PKWARE encryption\n- `\\PhpZip\\Constants\\ZipEncryptionMethod::WINZIP_AES_256` - WinZip AES encryption 256 bit (рекомендуемое)\n- `\\PhpZip\\Constants\\ZipEncryptionMethod::WINZIP_AES_192` - WinZip AES encryption 192 bit\n- `\\PhpZip\\Constants\\ZipEncryptionMethod::WINZIP_AES_128` - WinZip AES encryption 128 bit\n\n##### ZipFile::setReadPassword\nУстанавливает пароль на чтение открытого запароленного архива для всех зашифрованных записей.\n\n\u003e _Установка пароля не является обязательной для добавления новых записей или удаления существующих, но если вы захотите извлечь контент или изменить метод/уровень сжатия, метод шифрования или изменить пароль, то в этом случае пароль необходимо указать._\n```php\n$zipFile-\u003esetReadPassword($password);\n```\n##### ZipFile::setReadPasswordEntry\nУстанавливает пароль на чтение конкретной зашифрованной записи открытого запароленного архива.\n```php\n$zipFile-\u003esetReadPasswordEntry($entryName, $password);\n```\n##### ZipFile::setPassword\nУстанавливает новый пароль для всех файлов, находящихся в архиве.\n\n\u003e _Обратите внимание, что действие данного метода не распространяется на записи, добавленные после выполнения этого метода._\n```php\n$zipFile-\u003esetPassword($password);\n```\nМожно установить метод шифрования:\n```php\n$encryptionMethod = \\PhpZip\\Constants\\ZipEncryptionMethod::WINZIP_AES_256;\n$zipFile-\u003esetPassword($password, $encryptionMethod);\n```\n##### ZipFile::setPasswordEntry\nУстанавливает новый пароль для конкретного файла.\n```php\n$zipFile-\u003esetPasswordEntry($entryName, $password);\n```\nМожно установить метод шифрования:\n```php\n$encryptionMethod = \\PhpZip\\Constants\\ZipEncryptionMethod::WINZIP_AES_256;\n$zipFile-\u003esetPasswordEntry($entryName, $password, $encryptionMethod);\n```\n##### ZipFile::disableEncryption\nОтключает шифрования всех записей, находящихся в архиве.\n\n\u003e _Обратите внимание, что действие данного метода не распространяется на записи, добавленные после выполнения этого метода._\n```php\n$zipFile-\u003edisableEncryption();\n```\n##### ZipFile::disableEncryptionEntry\nОтключает шифрование записи по её имени.\n```php\n$zipFile-\u003edisableEncryptionEntry($entryName);\n```\n#### Отмена изменений\n##### ZipFile::unchangeAll\nОтменяет все изменения, сделанные в архиве.\n```php\n$zipFile-\u003eunchangeAll();\n```\n##### ZipFile::unchangeArchiveComment\nОтменяет изменения в комментарии к архиву.\n```php\n$zipFile-\u003eunchangeArchiveComment();\n```\n##### ZipFile::unchangeEntry\nОтменяет изменения для конкретной записи архива.\n```php\n$zipFile-\u003eunchangeEntry($entryName);\n```\n#### Сохранение файла или вывод в браузер\n##### ZipFile::saveAsFile\nСохраняет архив в файл.\n```php\n$zipFile-\u003esaveAsFile($filename);\n```\n##### ZipFile::saveAsStream\nЗаписывает архив в поток.\n```php\n// $fp = fopen($filename, 'w+b');\n\n$zipFile-\u003esaveAsStream($fp);\n```\n##### ZipFile::outputAsString\nВыводит ZIP-архив в виде строки.\n```php\n$rawZipArchiveBytes = $zipFile-\u003eoutputAsString();\n```\n##### ZipFile::outputAsAttachment\nВыводит ZIP-архив в браузер.\n\nПри выводе устанавливаются необходимые заголовки, а после вывода завершается работа скрипта.\n```php\n$zipFile-\u003eoutputAsAttachment($outputFilename);\n```\nМожно установить MIME-тип:\n```php\n$mimeType = 'application/zip';\n$zipFile-\u003eoutputAsAttachment($outputFilename, $mimeType);\n```\n##### ZipFile::outputAsPsr7Response\nВыводит ZIP-архив, как [PSR-7 Response](http://www.php-fig.org/psr/psr-7/).\n\nМетод вывода может использоваться в любом PSR-7 совместимом фреймворке. \n```php\n// $response = ....; // instance Psr\\Http\\Message\\ResponseInterface\n$zipFile-\u003eoutputAsPsr7Response($response, $outputFilename);\n```\nМожно установить MIME-тип:\n```php\n$mimeType = 'application/zip';\n$zipFile-\u003eoutputAsPsr7Response($response, $outputFilename, $mimeType);\n```\n##### ZipFile::outputAsSymfonyResponse\nВыводит ZIP-архив, как [Symfony Response](https://symfony.com/doc/current/components/http_foundation.html#response).\n\nМетод вывода можно использовать в фреймворке Symfony.\n```php\n$response = $zipFile-\u003eoutputAsSymfonyResponse($outputFilename);\n```\nВы можете установить Mime-Type:\n```php\n$mimeType = 'application/zip';\n$response = $zipFile-\u003eoutputAsSymfonyResponse($outputFilename, $mimeType);\n```\nПример использования в Symfony Controller:\n```php\n\u003c?php\n\nnamespace App\\Controller;\n\nuse PhpZip\\ZipFile;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Symfony\\Component\\Routing\\Annotation\\Route;\n\nclass DownloadZipController\n{\n    /**\n     * @Route(\"/downloads/{id}\")\n     *\n     * @throws \\PhpZip\\Exception\\ZipException\n     */\n    public function __invoke(string $id): Response\n    {\n        $zipFile = new ZipFile();\n        $zipFile['file'] = 'contents';\n\n        $outputFilename = $id . '.zip';\n        return $zipFile-\u003eoutputAsSymfonyResponse($outputFilename);\n    }\n}\n```\n##### ZipFile::rewrite\nСохраняет изменения и заново открывает изменившийся архив.\n```php\n$zipFile-\u003erewrite();\n```\n#### Закрытие архива\n##### ZipFile::close\nЗакрывает ZIP-архив.\n```php\n$zipFile-\u003eclose();\n```\n### Запуск тестов\nУстановите зависимости для разработки.\n```bash\ncomposer install --dev\n```\nЗапустите тесты:\n```bash\nvendor/bin/phpunit -v -c phpunit.xml\n```\n### История изменений\nИстория изменений на [странице релизов](https://github.com/Ne-Lexa/php-zip/releases).\n\n### Обновление версий\n#### Обновление с версии 3 до версии 4\nОбновите мажорную версию в файле `composer.json` до `^4.0`.\n```json\n{\n    \"require\": {\n        \"nelexa/zip\": \"^4.0\"\n    }\n}\n```\nЗатем установите обновления с помощью `Composer`:\n```bash\ncomposer update nelexa/zip\n```\nОбновите ваш код для работы с новой версией:\n- удалены устаревшие метроды\n- удалён zipalign функционал (он будет помещен в отдельный пакет nelexa/apkfile)\n#### Обновление с версии 2 до версии 3\nОбновите мажорную версию в файле `composer.json` до `^3.0`.\n```json\n{\n    \"require\": {\n        \"nelexa/zip\": \"^3.0\"\n    }\n}\n```\nЗатем установите обновления с помощью `Composer`:\n```bash\ncomposer update nelexa/zip\n```\nОбновите ваш код для работы с новой версией:\n- Класс `ZipOutputFile` объединён с `ZipFile` и удалён.\n  + Замените `new \\PhpZip\\ZipOutputFile()` на `new \\PhpZip\\ZipFile()`\n- Статичиская инициализация методов стала не статической.\n  + Замените `\\PhpZip\\ZipFile::openFromFile($filename);` на `(new \\PhpZip\\ZipFile())-\u003eopenFile($filename);`\n  + Замените `\\PhpZip\\ZipOutputFile::openFromFile($filename);` на `(new \\PhpZip\\ZipFile())-\u003eopenFile($filename);`\n  + Замените `\\PhpZip\\ZipFile::openFromString($contents);` на `(new \\PhpZip\\ZipFile())-\u003eopenFromString($contents);`\n  + Замените `\\PhpZip\\ZipFile::openFromStream($stream);` на `(new \\PhpZip\\ZipFile())-\u003eopenFromStream($stream);`\n  + Замените `\\PhpZip\\ZipOutputFile::create()` на `new \\PhpZip\\ZipFile()`\n  + Замените `\\PhpZip\\ZipOutputFile::openFromZipFile($zipFile)` на `(new \\PhpZip\\ZipFile())-\u003eopenFile($filename);`\n- Переименуйте методы:\n  + `addFromFile` в `addFile`\n  + `setLevel` в `setCompressionLevel`\n  + `ZipFile::setPassword` в `ZipFile::withReadPassword`\n  + `ZipOutputFile::setPassword` в `ZipFile::withNewPassword`\n  + `ZipOutputFile::disableEncryptionAllEntries` в `ZipFile::withoutPassword`\n  + `ZipOutputFile::setComment` в `ZipFile::setArchiveComment`\n  + `ZipFile::getComment` в `ZipFile::getArchiveComment`\n- Изменились сигнатуры для методов `addDir`, `addFilesFromGlob`, `addFilesFromRegex`.\n- Удалены методы:\n  + `getLevel`\n  + `setCompressionMethod`\n  + `setEntryPassword`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fne-lexa%2Fphp-zip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fne-lexa%2Fphp-zip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fne-lexa%2Fphp-zip/lists"}