PHP Conference Nagoya 2025

ZipArchive::setEncryptionName

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

ZipArchive::setEncryptionNameDefine o método de criptografia de uma entrada definida pelo seu nome

Descrição

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

Define o método de criptografia de uma entrada definida pelo seu nome.

Parâmetros

name

Nome da entrada.

method

O método de criptografia definido por uma das constantes ZipArchive::EM_.

password

Senha opcional, usada por padrão quando ausente.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 password é anulável agora.

Exemplos

Este exemplo cria um arquivo ZIP test.zip e adiciona o arquivo test.txt criptografado usando o método AES 256.

Exemplo #1 Arquivar e criptografar um arquivo

<?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";
}
?>

Notas

Nota:

Esta função está disponível apenas se construída contra libzip ≥ 1.2.0.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
9
mauro dot chojrin at leewayweb dot com
4 years ago
Files compressed using this function on Linux won't be decompressed using Windows.

There seems to be some incompatibility with Windows built-in decompressor.

There's an alternative library that works better here: https://github.com/Ne-Lexa/php-zip

I got windows to open a file created with it by using the PKWARE encryption method
up
2
romke at romke dot nl
3 years ago
On windows is the "EM_AES_256" by default not supported, but you can use winrar, winzip or 7zip.

At first we had a password of 128 chars (this was to long) and all extract applications give an error that the password was incorrect.

The next time we did use a password of 52 chars., this time i did work!
up
0
Anonymous
27 days ago
When using setEncryptionName, the first parameter is equal to the entry name of the file you added.
In case you set an explicit entry name with the second parameters of the addFile method, then you need to use that entry name.
Using the first parameter of addFile will only work in case the second parameter is not used.

This works :
$zip->addFile('test.txt', 'my_awesome_textfile.txt');
$zip->setEncryptionName('my_awesome_textfile.txt', ZipArchive::EM_AES_256);

This does not work and will generate an archive without any encryption :
$zip->addFile('test.txt', 'my_awesome_textfile.txt');
$zip->setEncryptionName('text.txt', ZipArchive::EM_AES_256);
To Top