diff --git a/composer.json b/composer.json index b1b5927..e6235e8 100644 --- a/composer.json +++ b/composer.json @@ -22,12 +22,12 @@ ], "require": { "php": "^5.5.9 || ^7.0", - "ext-zlib": "*", "psr/http-message": "^1.0", "paragonie/random_compat": "*", "symfony/finder": "^3.0|^4.0|^5.0" }, "require-dev": { + "ext-zlib": "*", "ext-bz2": "*", "ext-openssl": "*", "ext-fileinfo": "*", diff --git a/src/Util/FilesUtil.php b/src/Util/FilesUtil.php index 3e64614..cbe7531 100644 --- a/src/Util/FilesUtil.php +++ b/src/Util/FilesUtil.php @@ -2,6 +2,7 @@ namespace PhpZip\Util; +use PhpZip\Constants\ZipCompressionMethod; use PhpZip\Util\Iterator\IgnoreFilesFilterIterator; use PhpZip\Util\Iterator\IgnoreFilesRecursiveFilterIterator; @@ -319,6 +320,22 @@ public static function symlink($target, $path, $allowSymlink) return symlink($target, $path); } + /** + * @param bool $deflateCompatible + * + * @return int + */ + public static function getDefaultCompressionMethod($deflateCompatible) + { + if (!$deflateCompatible) { + return ZipCompressionMethod::STORED; + } + if (!extension_loaded('zlib')) { + return ZipCompressionMethod::STORED; + } + return ZipCompressionMethod::DEFLATED; + } + /** * @param string $file * diff --git a/src/ZipFile.php b/src/ZipFile.php index 384c03f..93674ba 100644 --- a/src/ZipFile.php +++ b/src/ZipFile.php @@ -576,9 +576,7 @@ public function addFromString($entryName, $contents, $compressionMethod = null) $compressionMethod = ZipCompressionMethod::STORED; } else { $mimeType = FilesUtil::getMimeTypeFromString($contents); - $compressionMethod = FilesUtil::isBadCompressionMimeType($mimeType) ? - ZipCompressionMethod::STORED : - ZipCompressionMethod::DEFLATED; + $compressionMethod = FilesUtil::getDefaultCompressionMethod(!FilesUtil::isBadCompressionMimeType($mimeType)); } } @@ -714,9 +712,7 @@ public function addSplFile(\SplFileInfo $file, $entryName = null, array $options } elseif ($file->getSize() < 512) { $compressionMethod = ZipCompressionMethod::STORED; } else { - $compressionMethod = FilesUtil::isBadCompressionFile($file->getPathname()) ? - ZipCompressionMethod::STORED : - ZipCompressionMethod::DEFLATED; + $compressionMethod = FilesUtil::getDefaultCompressionMethod(!FilesUtil::isBadCompressionFile($file->getPathname())); } $zipEntry->setCompressionMethod($compressionMethod); @@ -838,9 +834,7 @@ public function addFromStream($stream, $entryName, $compressionMethod = null) $bufferContents = stream_get_contents($stream, min(1024, $length)); rewind($stream); $mimeType = FilesUtil::getMimeTypeFromString($bufferContents); - $compressionMethod = FilesUtil::isBadCompressionMimeType($mimeType) ? - ZipCompressionMethod::STORED : - ZipCompressionMethod::DEFLATED; + $compressionMethod = FilesUtil::getDefaultCompressionMethod(!FilesUtil::isBadCompressionMimeType($mimeType)); } $zipEntry->setUncompressedSize($length); } @@ -848,7 +842,7 @@ public function addFromStream($stream, $entryName, $compressionMethod = null) $unixMode = 0100644; if ($compressionMethod === null || $compressionMethod === ZipEntry::UNKNOWN) { - $compressionMethod = ZipCompressionMethod::DEFLATED; + $compressionMethod = FilesUtil::getDefaultCompressionMethod(true); } }