PHP Conference Japan 2024

ZipArchive::setEncryptionName

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

ZipArchive::setEncryptionName设置按名称定义的条目的加密方法

描述

public ZipArchive::setEncryptionName(string $name, int $method, #[\SensitiveParameter] ?string $password = null): bool

设置按名称定义的条目的加密方法。

参数

name

条目的名称。

method

由ZipArchive::EM_常量之一定义的加密方法。

password

可选密码,缺失时使用默认密码。

返回值

成功返回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 条注释

9
mauro dot chojrin at leewayweb dot com
4年前
在Linux上使用此函数压缩的文件无法使用Windows解压缩。

Windows内置解压缩程序似乎存在一些不兼容性。

这里有一个更好的替代库:https://github.com/Ne-Lexa/php-zip

我使用PKWARE加密方法让Windows打开了用它创建的文件
2
romke at romke dot nl
3年前
在Windows上,“EM_AES_256”默认不支持,但您可以使用WinRAR、WinZip或7-Zip。

起初我们的密码是128个字符(太长了),所有提取应用程序都会报错密码不正确。

下一次我们使用了52个字符的密码,这次成功了!
0
匿名
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