PHP Conference Japan 2024

ZipArchive::setEncryptionName

(PHP >= 7.2.0, PHP 8, PECL zip >= 1.14.0)

ZipArchive::setEncryptionName設定以名稱定義之項目的加密方法

說明

public ZipArchive::setEncryptionName(字串 $name, 整數 $method, #[\SensitiveParameter] ?字串 $password = null): 布林值

設定以名稱定義之項目的加密方法。

參數

name

項目的名稱。

method

由其中一個 ZipArchive::EM_ 常數定義的加密方法。

密碼

可選的密碼,如果缺少則使用預設密碼。

回傳值

成功時回傳 true,失敗時回傳 false

更新日誌

版本 說明
8.0.0 password 現在可以為 null。

範例

此範例建立一個名為 test.zip 的 ZIP 檔案,並使用 AES 256 方法加密檔案 test.txt 後加入其中。

範例 #1 壓縮並加密檔案

<?php
$zip
= new ZipArchive();
if (
$zip->open('test.zip', ZipArchive::CREATE) === TRUE) {
$zip->setPassword('secret');
$zip->addFile('text.txt');
$zip->setEncryptionName('text.txt', ZipArchive::EM_AES_256);
$zip->close();
echo
"Ok\n";
} else {
echo
"KO\n";
}
?>

注意事項

注意:

此函式僅在使用 libzip ≥ 1.2.0 版本建置時才可用。

參見

新增註解

使用者貢獻的註解 3 則註解

mauro dot chojrin at leewayweb dot com
4 年前
在 Linux 上使用此函式壓縮的檔案無法使用 Windows 解壓縮。

似乎與 Windows 內建的解壓縮程式不相容。

這裡有一個替代的函式庫,效果更好: https://github.com/Ne-Lexa/php-zip

我透過使用 PKWARE 加密方法讓 Windows 開啟了用它建立的檔案。
romke at romke dot nl
3 年前
Windows 預設不支援 "EM_AES_256",但您可以使用 WinRAR、WinZip 或 7-Zip。

一開始我們使用 128 個字元的密碼(這太長了),所有解壓縮應用程式都顯示密碼錯誤。

下一次我們使用了 52 個字元的密碼,這次成功了!
匿名
29 天前
使用 setEncryptionName 時,第一個參數等於您新增的檔案的項目名稱。
如果您使用 addFile 方法的第二個參數設定了明確的項目名稱,則需要使用該項目名稱。
僅在未使用第二個參數的情況下,才能使用 addFile 的第一個參數。

以下程式碼可以運作:
$zip->addFile('test.txt', 'my_awesome_textfile.txt');
$zip->setEncryptionName('my_awesome_textfile.txt', ZipArchive::EM_AES_256);

以下程式碼無法運作,會產生未加密的壓縮檔:
$zip->addFile('test.txt', 'my_awesome_textfile.txt');
$zip->setEncryptionName('text.txt', ZipArchive::EM_AES_256);
To Top