<?php namespace PhpZip\Constants; use PhpZip\Exception\ZipUnsupportMethodException; /** * Class ZipCompressionMethod. */ final class ZipCompressionMethod { /** @var int Compression method Store */ const STORED = 0; /** @var int Compression method Deflate */ const DEFLATED = 8; /** @var int Compression method Bzip2 */ const BZIP2 = 12; /** @var int Compression method AES-Encryption */ const WINZIP_AES = 99; /** @var array Compression Methods */ private static $ZIP_COMPRESSION_METHODS = [ self::STORED => 'Stored', 1 => 'Shrunk', 2 => 'Reduced compression factor 1', 3 => 'Reduced compression factor 2', 4 => 'Reduced compression factor 3', 5 => 'Reduced compression factor 4', 6 => 'Imploded', 7 => 'Reserved for Tokenizing compression algorithm', self::DEFLATED => 'Deflated', 9 => 'Enhanced Deflating using Deflate64(tm)', 10 => 'PKWARE Data Compression Library Imploding', 11 => 'Reserved by PKWARE', self::BZIP2 => 'BZIP2', 13 => 'Reserved by PKWARE', 14 => 'LZMA', 15 => 'Reserved by PKWARE', 16 => 'Reserved by PKWARE', 17 => 'Reserved by PKWARE', 18 => 'File is compressed using IBM TERSE (new)', 19 => 'IBM LZ77 z Architecture (PFS)', 96 => 'WinZip JPEG Compression', 97 => 'WavPack compressed data', 98 => 'PPMd version I, Rev 1', self::WINZIP_AES => 'AES Encryption', ]; /** * @param int $value * * @return string */ public static function getCompressionMethodName($value) { return isset(self::$ZIP_COMPRESSION_METHODS[$value]) ? self::$ZIP_COMPRESSION_METHODS[$value] : 'Unknown Method'; } /** * @return int[] */ public static function getSupportMethods() { static $methods; if ($methods === null) { $methods = [ self::STORED, self::DEFLATED, ]; if (\extension_loaded('bz2')) { $methods[] = self::BZIP2; } } return $methods; } /** * @param int $compressionMethod * * @throws ZipUnsupportMethodException */ public static function checkSupport($compressionMethod) { $compressionMethod = (int) $compressionMethod; if (!\in_array($compressionMethod, self::getSupportMethods(), true)) { throw new ZipUnsupportMethodException(sprintf( 'Compression method %d (%s) is not supported.', $compressionMethod, self::getCompressionMethodName($compressionMethod) )); } } }