PHP Conference Nagoya 2025

ZipArchive::setArchiveComment

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

ZipArchive::setArchiveCommentSet the comment of a ZIP archive

说明

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

Set the comment of a ZIP archive.

参数

comment

The contents of the comment.

返回值

成功时返回 true, 或者在失败时返回 false

示例

示例 #1 Create an archive and set a comment

<?php
$zip
= new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if (
$res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->setArchiveComment('new archive comment');
$zip->close();
echo
'ok';
} else {
echo
'failed';
}
?>
添加备注

用户贡献的备注 3 notes

up
6
stanislav dot eckert at vizson dot de
9 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
8 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
1 year 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