ZipArchive::setArchiveComment

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

ZipArchive::setArchiveComment设置 ZIP 存档的注释

描述

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

设置 ZIP 存档的注释。

参数

comment

注释的内容。

返回值

成功时返回 true,失败时返回 false

范例

示例 #1 创建存档并设置注释

<?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 条笔记

stanislav dot eckert at vizson dot de
9 年前
请注意,ZIP 存档不支持 UTF-8 等 Unicode 编码,因此多字节字符无法在标准 ZIP 查看器(如 WinRAR 或 7-zip)中显示。但是,文本将按原样存储,因此至少可以在您自己的桌面或 Web 应用程序中显示 UTF-8 注释。如果您想使用 PHP 进行测试并在浏览器中输出,请不要忘记将页面字符集也设置为 UTF-8

header("Content-Type: text/plain; charset=utf-8");
solrac at ragnarockradio dot com
7 年前
ZIP 存档在存储时以 ISO-8859-1 编码,但注释似乎始终以 UTF-8 编码添加。所以...

<?php
$zip
->setArchiveComment("Peña"); // 输出 "Peña" 作为注释。

$zip->setArchiveComment("Peña"); // 输出 "NULL" 作为注释 / 没有显示注释。
?>

使用 mb_internal_encoding() 或 mb_http_output() 不会改变这种行为。
最后,您可以使用类似 str_replace() 的方法修复损坏的注释。

考虑这一点

<?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'); // 输出 "Peña" 作为注释。
$zip->close();
$file = file_get_contents('test.zip');
file_put_contents('test.zip', str_replace("Peña", utf8_decode("Peña"), $file)); // 输出 "Peña" 作为注释。已修复!

echo 'ok';
} else {
echo
'failed';
}
?>
poetbi at boasoft dot cn
10 个月前
ZipArchive(使用 libzip)以 UTF-8/ASCII 编码注释,但 Windows 上的一些软件以 ANSI(如 GBK ...)显示注释,因此我们应该

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

$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::CREATE);
if (
$res) {
// 在此处添加文件

if($_charset){ // 针对 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{
// 针对 PHP: $zip->getArchiveComment()
$zip->setArchiveComment($comment);
$zip->close();
}
}
?>
To Top