ZipArchive::setCompressionName

(PHP 7, PHP 8, PECL zip >= 1.13.0)

ZipArchive::setCompressionName设置由其名称定义的条目的压缩方法

说明

public ZipArchive::setCompressionName(string $name, int $method, int $compflags = 0): bool

设置由其名称定义的条目的压缩方法。

参数

name

条目的名称。

method

压缩方法,是 ZipArchive::CM_* 常量之一。

compflags

压缩级别。

返回值

成功时返回 true,失败时返回 false

范例

范例 #1 使用不同的压缩方法将文件添加到存档中

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFromString('foo', 'Some text');
$zip->addFromString('bar', 'Some other text');
$zip->setCompressionName('foo', ZipArchive::CM_STORE);
$zip->setCompressionName('bar', ZipArchive::CM_DEFLATE);
$zip->close();
echo
'ok';
} else {
echo
'failed';
}
?>

范例 #2 添加文件并设置压缩方法

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFile('foo.jpg', 'bar.jpg');
$zip->setCompressionName('bar.jpg', ZipArchive::CM_XZ);
$zip->close();
echo
'ok';
} else {
echo
'failed';
}
?>
添加说明

用户贡献说明 1 个说明

gajowy at agzeta dot pl
1 年前
压缩级别 (compflags) 选项通常是介于 0 和 9 之间的整数。系统的行为取决于所选方法和 compflags 的值,有时可能与您的预期不符。

以下结果来自 Windows 平台上的 PHP 8.1,在其他系统或版本上可能有所不同

- 对于 CM_DEFAULT 方法,始终使用 CM_DEFLATE 级别 9,无论您将 compflags 设置为多少,

- 对于 CM_STORE 方法,对于 compflags 0-9,您将获得相同的结果,这很明显,因为该方法本身意味着“根本不压缩”。但是,对于 compflags>9,令人惊讶的是,改为使用 CM_DEFLATE 方法,压缩级别为 9。

- 对于 CM_DEFLATE 方法,1 表示最快和最弱的压缩,而 9 表示最慢和最强的压缩。compflags=0 和 compflags>9 的作用与 compflags=9 相同,

- 对于 CM_BZIP2 方法,1 表示最快和最弱的压缩,而 9 表示最慢和最强的压缩。compflags=0 的作用与 compflag=9 相同,如果您使用 compflags>9,该方法将意外地切换到 CM_DEFLATE 级别 9,

- 对于 CM_XZ 方法,0 表示最快和最弱的压缩,而 9 表示最慢和最强的压缩。对于 compflags>9,该方法意外地切换到 CM_DEFLATE 级别 9。
To Top