Skip to content

DmitryKmita/distill

 
 

Repository files navigation

Distill: Smart compressed files extractor for PHP

Build Status Latest Stable Version Total Downloads Latest Unstable Version

Distill extracts files from compressed archives.

Features:

  • Extract files from bz2, gz, phar, rar, tar, tar.bz2, tar.gz, tar.xz, 7z, xz and zip archives.
  • Different uncompression methods under the hood: PHP extensions and command line binaries.
  • Strategy to choose the right file in case there are more than one available format. Strategies can be based on minimizing bandwidth or optimizing uncompression speed.

Installation

The recommended way to install Distill is through Composer. Just create a composer.json file for your project:

Latest Stable Version Latest Unstable Version

{
    "require": {
        "raulfraile/distill": "*"
    }
}

To actually install Distill in your project, download the composer binary and run it:

wget http://getcomposer.org/composer.phar
# or
curl -O http://getcomposer.org/composer.phar

php composer.phar install

Example

use Distill\Distill;

$distill = new Distill();
$distill->extract(__DIR__ . '/../tests/files/file_ok.zip', __DIR__ . '/extract');

Formats

Format support

  • bz2: bzip2 unix command and 7z unix command.
  • cab: 7z unix command.
  • gz: gzip unix command and 7z unix command.
  • phar: PHAR extension.
  • rar: unrar unix command, 7z unix command, and rar extension.
  • tar: tar unix command, 7z unix command, Archive_Tar package and PHAR extension.
  • tar.bz2: tar unix command, Archive_Tar package and PHAR extension.
  • tar.gz: tar unix command, Archive_Tar package and PHAR extension.
  • tar.xz: tar unix command.
  • 7z: 7z unix command.
  • xz: xz unix command and 7z unix command.
  • zip: tar unix command, 7z unix command and zip extension.

Strategies

Distill allows to choose one format in case there are many available. For example, it can be useful for installers that want to reduce the bandwidth usage trying to choose compression formats with higher compression ratio and available in the client machine.

The library provides three strategies (more can be added):

  • Minimum size (default): Choose files with higher compression ratio.
  • Uncompression speed: Choose files which are faster to uncompress.
  • Random: Gets a random file which can be uncompressed by the system.
use Distill\Distill;

$distill = new Distill();

$preferredFile = $distill
    ->getChooser()
    ->setStrategy(new \Distill\Strategy\MinimumSize())
    ->addFile('http://get.symfony.com/Symfony_Standard_Vendors_2.5.3.zip')
    ->addFile('http://get.symfony.com/Symfony_Standard_Vendors_2.5.3.tgz')
    ->getPreferredFile();

echo $preferredFile; // http://get.symfony.com/Symfony_Standard_Vendors_2.5.3.tgz
use Distill\Distill;

$distill = new Distill();

$preferredFile = $distill
    ->getChooser()
    ->setStrategy(new \Distill\Strategy\UncompressionSpeed())
    ->addFile('test.phar')
    ->addFile('test.zip')
    ->getPreferredFile();

echo $preferredFile; // test.zip

Command line tool

If you are looking for a command line tool to extract compressed files check out distill-cli, which uses this library:

$ distill-cli extract archive.tar.gz path/

Credits

License

Distill is released under the MIT License. See the bundled LICENSE file for details.

About

Smart compressed files extractor for PHP

Resources

License

Stars

Watchers

Forks

Packages

No packages published