123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?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)
- ));
- }
- }
- }
|