CakeFest 2024: The Official CakePHP Conference

ZipArchive::setArchiveComment

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.4.0)

ZipArchive::setArchiveCommentDéfinit le commentaire d'une archive ZIP

Description

public ZipArchive::setArchiveComment(string $comment): bool

Définit le commentaire d'une archive ZIP.

Liste de paramètres

comment

Le contenu du commentaire

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Création d'une archive et définition d'un commentaire

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFromString('test.txt', 'contenu du fichier ici');
$zip->setArchiveComment('commentaire de l\'archive');
$zip->close();
echo
'ok';
} else {
echo
'échec';
}
?>
add a note

User Contributed Notes 3 notes

up
6
stanislav dot eckert at vizson dot de
8 years ago
Please note that ZIP archives do not support unicode encodings like UTF-8, so multi-byte characters cannot be shown in standard ZIP viewers like WinRAR or 7-zip. However, the text will stored as-is, so it is at least possible to display UTF-8 comments in your own desktop or web applications. If you want to test with PHP and output in a browser, don't forget to set page charset to UTF-8 too:

header("Content-Type: text/plain; charset=utf-8");
up
1
solrac at ragnarockradio dot com
7 years ago
Zip archives are encoded in ISO-8859-1 when stored but comments seem to be added in UTF-8 everytime. So...

<?php
$zip
->setArchiveComment("Peña"); //outputs "Peña" as the comment.

$zip->setArchiveComment("Peña"); //outputs "NULL" as the comment / no comment is displayed.
?>

Using mb_internal_encoding() or mb_http_output() wont change this behavior.
At the end you can fix your corrupted comment using something like str_replace();

Consider this:

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->setArchiveComment('Peña'); //outputs "Peña" as the comment.
$zip->close();
$file = file_get_contents('test.zip');
file_put_contents('test.zip', str_replace("Peña", utf8_decode("Peña"), $file)); //outputs "Peña" as the comment. FIXED!

echo 'ok';
} else {
echo
'failed';
}
?>
up
1
poetbi at boasoft dot cn
5 months ago
ZipArchive (using libzip) encodes comments in UTF-8/ASCII, but some softwares on Windows show comments in ANSI (such as GBK...), so we should :

<?php
$_charset
= 'GBK';
$file = 'D:/boaphp.zip';
$comment = '中文ABC123';

$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::CREATE);
if (
$res) {
//add files here

if($_charset){ //for Winrar, 7z...
$zip->close();

$str = mb_convert_encoding($comment, $_charset, 'UTF-8');
$fh = fopen($file, 'r+b');
fseek($fh, -2, SEEK_END);
$str = pack('v', strlen($str)) . $str;
fwrite($fh, $str);
fclose($fh);
}else{
//for PHP: $zip->getArchiveComment()
$zip->setArchiveComment($comment);
$zip->close();
}
}
?>
To Top