kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

PHP ZipArchive::setCompressionName压缩质量

在添加文件之前,我们可以通过设置ZipArchive类的属性setCompressionName来设置文件的压缩质量。

压缩质量有几个选项可供选择,包括

ZipArchive::CM_STORE表示不进行压缩,

ZipArchive::CM_DEFLATE表示使用DEFLATE算法进行压缩。

默认情况下,压缩质量是ZipArchive::CM_STORE,即不进行压缩。

https://www.php.net/manual/en/ziparchive.setcompressionname.php

1
2
3
4
5
6
7
8
9
10
public ZipArchive::setCompressionName(string $name, int $method, int $compflags = 0): bool

name
	Name of the entry.
method
	The compression method, one of the ZipArchive::CM_* constants.
compflags
	Compression level.

Returns true on success or false on failure. 

The compression level (compflags) option is, generally speaking, an integer value between 0 and 9. The behavior of the system depends on the selected method and the value of compflags and can sometimes be not you expected.

The result below is from PHP 8.1 on Windows platform and may possibly be different on other systems or versions:

  • for the CM_DEFAULT method, always CM_DEFLATE is used with level 9, regardless of what you put as compflags,

  • for the CM_STORE method, for compflags 0-9 you get the same result, which is obvious because the method itself means “no compression at all”. However, for compflags>9, surprisingly the CM_DEFLATE method is used instead with compression level 9.

  • for CM_DEFLATE method, 1 means the fastest and weakest compression, while 9 - the slowest and strongest one. compflags=0 and compflags>9 works as it if were with compflags=9,

  • for CM_BZIP2 method, 1 means the fastest and weakest compression, while 9 - the slowest and strongest one. compflags=0 works like compflag=9, and if you use compflags>9, the method will surprisingly switch to CM_DEFLATE level 9,

  • for CM_XZ method, 0 means the fastest and weakest compression, while 9 - the slowest and strongest one. For compflags>9 the method surprisingly switch to CM_DEFLATE level 9.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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->addFromString('baa', 'Some other text2');
	$zip->setCompressionName('foo', ZipArchive::CM_STORE);

	$zip->setCompressionName('bar', ZipArchive::CM_DEFLATE);
	$zip->setCompressionName('baa', ZipArchive::CM_DEFLATE, 1);

	$zip->close();
	echo 'ok';
} else {
	echo 'failed';
}
?>

https://www.php.cn/faq/581904.html

1
2
$zip->addFile('path/to/file.txt', 'file.txt');
$zip->setCompressionName('file.txt', ZipArchive::CM_DEFLATE);

除了设置整个压缩文件的压缩质量,我们还可以为单独的文件设置压缩质量,代码示例如下:

1
$zip->setCompressionIndex(0, ZipArchive::CM_DEFLATE);

最后,我们需要关闭ZipArchive对象以完成整个压缩过程:

1
$zip->close();

https://www.cnblogs.com/aipiaoborensheng/p/6362858.html

https://vimsky.com/examples/detail/php-ex---ZipArchive-setCompressionName.html

language, php

« LVM 逻辑卷管理 php如何让数组倒叙 »