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', '一些文字');
$zip->addFromString('bar', '其他文字');
$zip->setCompressionName('foo', ZipArchive::CM_STORE);
$zip->setCompressionName('bar', ZipArchive::CM_DEFLATE);
$zip->close();
echo
'ok';
} else {
echo
'失敗';
}
?>

範例 #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 則註解

2
gajowy at agzeta dot pl
1 年前
壓縮等級 (compflags) 選項通常是一個介於 0 到 9 之間的整數值。系統的行為取決於所選的方法和 compflags 的值,有時可能與您的預期不符。

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

- 對於 CM_DEFAULT 方法,無論您將 compflags 設定為何值,一律使用壓縮等級 9 的 CM_DEFLATE,

- 對於 CM_STORE 方法,compflags 0-9 會得到相同的結果,這很明顯,因為該方法本身意味著「完全不壓縮」。然而,令人驚訝的是,當 compflags>9 時,會改用壓縮等級 9 的 CM_DEFLATE 方法。

- 對於 CM_DEFLATE 方法,1 表示最快且最弱的壓縮,而 9 表示最慢且最強的壓縮。 compflags=0 和 compflags>9 的效果與 compflags=9 相同,

- 對於 CM_BZIP2 方法,1 表示最快且最弱的壓縮,而 9 表示最慢且最強的壓縮。 compflags=0 的效果與 compflag=9 相同,如果您使用 compflags>9,該方法會令人驚訝地切換到壓縮等級 9 的 CM_DEFLATE,

- 對於 CM_XZ 方法,0 表示最快且最弱的壓縮,而 9 表示最慢且最強的壓縮。對於 compflags>9,該方法會令人驚訝地切換到壓縮等級 9 的 CM_DEFLATE。
To Top