PHP Conference Japan 2024

ZipArchive::setCompressionName

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

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

描述

public ZipArchive::setCompressionName(字符串 $name, 整数 $method, 整数 $compflags = 0): 布尔值

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

参数

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 方法,始终使用级别 9 的 CM_DEFLATE,无论您将 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