在 Linux 上使用此函式壓縮的檔案無法使用 Windows 解壓縮。
似乎與 Windows 內建的解壓縮程式不相容。
這裡有一個替代的函式庫,效果更好: https://github.com/Ne-Lexa/php-zip
我透過使用 PKWARE 加密方法讓 Windows 開啟了用它建立的檔案。
(PHP >= 7.2.0, PHP 8, PECL zip >= 1.14.0)
ZipArchive::setEncryptionName — 設定以名稱定義之項目的加密方法
$name
, 整數 $method
, #[\SensitiveParameter] ?字串 $password
= null
): 布林值設定以名稱定義之項目的加密方法。
name
項目的名稱。
method
由其中一個 ZipArchive::EM_ 常數定義的加密方法。
密碼
可選的密碼,如果缺少則使用預設密碼。
版本 | 說明 |
---|---|
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 版本建置時才可用。
在 Linux 上使用此函式壓縮的檔案無法使用 Windows 解壓縮。
似乎與 Windows 內建的解壓縮程式不相容。
這裡有一個替代的函式庫,效果更好: https://github.com/Ne-Lexa/php-zip
我透過使用 PKWARE 加密方法讓 Windows 開啟了用它建立的檔案。
Windows 預設不支援 "EM_AES_256",但您可以使用 WinRAR、WinZip 或 7-Zip。
一開始我們使用 128 個字元的密碼(這太長了),所有解壓縮應用程式都顯示密碼錯誤。
下一次我們使用了 52 個字元的密碼,這次成功了!
使用 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);