PHPackages                             aungmyokyaw/zipper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. aungmyokyaw/zipper

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

aungmyokyaw/zipper
==================

This is a little neat helper for the ZipArchive methods with handy functions

v1.0.1(3y ago)2759MITPHPPHP ^7.2||^8.0

Since Apr 16Pushed 3y agoCompare

[ Source](https://github.com/aungmyokyaw97/Zipper)[ Packagist](https://packagist.org/packages/aungmyokyaw/zipper)[ RSS](/packages/aungmyokyaw-zipper/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (3)Dependencies (4)Versions (4)Used By (0)

Zipper
======

[](#zipper)

This is a simple Wrapper around the ZipArchive methods with some handy functions.

Original credit for the package
===============================

[](#original-credit-for-the-package)

[Chumper/Zipper](https://github.com/Chumper/Zipper)
---------------------------------------------------

[](#chumperzipper)

Installation
------------

[](#installation)

```
composer require aungmyokyaw/zipper
```

You can now access Zipper with the `Zipper` alias.

Simple example
--------------

[](#simple-example)

```
$files = glob('public/files/*');
Zipper::make('public/test.zip')->add($files)->close();
```

- by default the package will create the `test.zip` in the project route folder but in the example above we changed it to `project_route/public/`.

Another example
---------------

[](#another-example)

```
$zipper = new \Amk\Zipper\Zipper;

$zipper->make('test.zip')->folder('test')->add('composer.json');
$zipper->zip('test.zip')->folder('test')->add('composer.json','test');

$zipper->remove('composer.lock');

$zipper->folder('mySuperPackage')->add(
    array(
        'vendor',
        'composer.json'
    ),
);

$zipper->getFileContent('mySuperPackage/composer.json');

$zipper->make('test.zip')->extractTo('',array('mySuperPackage/composer.json'),Zipper::WHITELIST);

$zipper->close();
```

Note: Please be aware that you need to call `->close()` at the end to write the zip file to disk.

You can easily chain most functions, except `getFileContent`, `getStatus`, `close` and `extractTo` which must come at the end of the chain.

The main reason I wrote this little package is the `extractTo` method since it allows you to be very flexible when extracting zips. So you can for example implement an update method which will just override the changed files.

Functions
=========

[](#functions)

make($pathToFile)
-----------------

[](#makepathtofile)

`Create` or `Open` a zip archive; if the file does not exists it will create a new one. It will return the Zipper instance so you can chain easily.

add($files/folder)
------------------

[](#addfilesfolder)

You can add an array of Files, or a Folder and all the files in that folder will then be added, so from the first example we could instead do something like `$files = 'public/files/';`.

addString($filename, $content)
------------------------------

[](#addstringfilename-content)

add a single file to the zip by specifying a name and the content as strings.

remove($file/s)
---------------

[](#removefiles)

removes a single file or an array of files from the zip.

folder($folder)
---------------

[](#folderfolder)

Specify a folder to 'add files to' or 'remove files from' from the zip, example

```
Zipper::make('test.zip')->folder('test')->add('composer.json');
Zipper::make('test.zip')->folder('test')->remove('composer.json');
```

listFiles($regexFilter = null)
------------------------------

[](#listfilesregexfilter--null)

Lists all files within archive (if no filter pattern is provided). Use `$regexFilter` parameter to filter files. See [Pattern Syntax](http://php.net/manual/en/reference.pcre.pattern.syntax.php) for regular expression syntax

> NB: `listFiles` ignores folder set with `folder` function

Example: Return all files/folders ending/not ending with '.log' pattern (case insensitive). This will return matches in sub folders and their sub folders also

```
$logFiles = Zipper::make('test.zip')->listFiles('/\.log$/i');
$notLogFiles = Zipper::make('test.zip')->listFiles('/^(?!.*\.log).*$/i');
```

home()
------

[](#home)

Resets the folder pointer.

zip($fileName)
--------------

[](#zipfilename)

Uses the ZipRepository for file handling.

getFileContent($filePath)
-------------------------

[](#getfilecontentfilepath)

get the content of a file in the zip. This will return the content or false.

getStatus()
-----------

[](#getstatus)

get the opening status of the zip as integer.

close()
-------

[](#close)

closes the zip and writes all changes.

extractTo($path)
----------------

[](#extracttopath)

Extracts the content of the zip archive to the specified location, for example

```
Zipper::make('test.zip')->folder('test')->extractTo('foo');
```

This will go into the folder `test` in the zip file and extract the content of that folder only to the folder `foo`, this is equal to using the `Zipper::WHITELIST`.

This command is really nice to get just a part of the zip file, you can also pass a 2nd &amp; 3rd param to specify a single or an array of files that will be

> NB: Php ZipArchive uses internally '/' as directory separator for files/folders in zip. So Windows users should not set whitelist/blacklist patterns with '' as it will not match anything

white listed

> **Zipper::WHITELIST**

```
Zipper::make('test.zip')->extractTo('public', array('vendor'), Zipper::WHITELIST);
```

Which will extract the `test.zip` into the `public` folder but **only** files/folders starting with `vendor` prefix inside the zip will be extracted.

or black listed

> **Zipper::BLACKLIST**Which will extract the `test.zip` into the `public` folder except files/folders starting with `vendor` prefix inside the zip will not be extracted.

```
Zipper::make('test.zip')->extractTo('public', array('vendor'), Zipper::BLACKLIST);
```

> **Zipper::EXACT\_MATCH**

```
Zipper::make('test.zip')
    ->folder('vendor')
    ->extractTo('public', array('composer', 'bin/phpunit'), Zipper::WHITELIST | Zipper::EXACT_MATCH);
```

Which will extract the `test.zip` into the `public` folder but **only** files/folders **exact matching names**. So this will:

- extract file or folder named `composer` in folder named `vendor` inside zip to `public` resulting `public/composer`
- extract file or folder named `bin/phpunit` in `vendor/bin/phpunit` folder inside zip to `public` resulting `public/bin/phpunit`

> **NB:** extracting files/folder from zip without setting Zipper::EXACT\_MATCH When zip has similar structure as below and only `test.bat` is given as whitelist/blacklist argument then `extractTo` would extract all those files and folders as they all start with given string

```
test.zip
 |- test.bat
 |- test.bat.~
 |- test.bat.dir/
    |- fileInSubFolder.log

```

extractMatchingRegex($path, $regex)
-----------------------------------

[](#extractmatchingregexpath-regex)

Extracts the content of the zip archive matching regular expression to the specified location. See [Pattern Syntax](http://php.net/manual/en/reference.pcre.pattern.syntax.php) for regular expression syntax.

Example: extract all files ending with `.php` from `src` folder and its sub folders.

```
Zipper::make('test.zip')->folder('src')->extractMatchingRegex($path, '/\.php$/i');
```

Example: extract all files **except** those ending with `test.php` from `src` folder and its sub folders.

```
Zipper::make('test.zip')->folder('src')->extractMatchingRegex($path, '/^(?!.*test\.php).*$/i');
```

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity19

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor3

3 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

3

Last Release

1165d ago

Major Versions

v0.0.1 → v1.0.02023-04-19

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/32431323?v=4)[Aung Myo Kyaw](/maintainers/aungmyokyaw97)[@aungmyokyaw97](https://github.com/aungmyokyaw97)

---

Top Contributors

[![Chumper](https://avatars.githubusercontent.com/u/919670?v=4)](https://github.com/Chumper "Chumper (19 commits)")[![aldas](https://avatars.githubusercontent.com/u/2320301?v=4)](https://github.com/aldas "aldas (12 commits)")[![rvitaliy](https://avatars.githubusercontent.com/u/1823711?v=4)](https://github.com/rvitaliy "rvitaliy (12 commits)")[![aungmyokyaw97](https://avatars.githubusercontent.com/u/32431323?v=4)](https://github.com/aungmyokyaw97 "aungmyokyaw97 (3 commits)")[![thecotne](https://avatars.githubusercontent.com/u/1606993?v=4)](https://github.com/thecotne "thecotne (3 commits)")[![actionm](https://avatars.githubusercontent.com/u/1145098?v=4)](https://github.com/actionm "actionm (2 commits)")[![nextlevelshit](https://avatars.githubusercontent.com/u/10194510?v=4)](https://github.com/nextlevelshit "nextlevelshit (2 commits)")[![plantwebdesign](https://avatars.githubusercontent.com/u/838647?v=4)](https://github.com/plantwebdesign "plantwebdesign (2 commits)")[![snipe](https://avatars.githubusercontent.com/u/197404?v=4)](https://github.com/snipe "snipe (2 commits)")[![bart](https://avatars.githubusercontent.com/u/5200235?v=4)](https://github.com/bart "bart (2 commits)")[![heslil](https://avatars.githubusercontent.com/u/14540581?v=4)](https://github.com/heslil "heslil (1 commits)")[![ikeedo](https://avatars.githubusercontent.com/u/623353?v=4)](https://github.com/ikeedo "ikeedo (1 commits)")[![inov](https://avatars.githubusercontent.com/u/2234246?v=4)](https://github.com/inov "inov (1 commits)")[![lex111](https://avatars.githubusercontent.com/u/4408379?v=4)](https://github.com/lex111 "lex111 (1 commits)")[![nadjib](https://avatars.githubusercontent.com/u/7357519?v=4)](https://github.com/nadjib "nadjib (1 commits)")[![socieboy](https://avatars.githubusercontent.com/u/7442695?v=4)](https://github.com/socieboy "socieboy (1 commits)")[![vool](https://avatars.githubusercontent.com/u/441840?v=4)](https://github.com/vool "vool (1 commits)")[![xploSEoF](https://avatars.githubusercontent.com/u/7510900?v=4)](https://github.com/xploSEoF "xploSEoF (1 commits)")[![alesf](https://avatars.githubusercontent.com/u/1148574?v=4)](https://github.com/alesf "alesf (1 commits)")[![arthurprogramming](https://avatars.githubusercontent.com/u/4672300?v=4)](https://github.com/arthurprogramming "arthurprogramming (1 commits)")

---

Tags

laravelarchivezip

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/aungmyokyaw-zipper/health.svg)

```
[![Health](https://phpackages.com/badges/aungmyokyaw-zipper/health.svg)](https://phpackages.com/packages/aungmyokyaw-zipper)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

9782.1M162](/packages/laravel-ai)[moonshine/moonshine

Laravel administration panel

1.3k239.9k76](/packages/moonshine-moonshine)[erag/laravel-lang-sync-inertia

A powerful Laravel package for syncing and managing language translations across backend and Inertia.js (Vue/React) frontends, offering effortless localization, auto-sync features, and smooth multi-language support for modern Laravel applications.

4821.5k](/packages/erag-laravel-lang-sync-inertia)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
