ZipArchive::setArchiveComment

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

ZipArchive::setArchiveCommentSet the comment of a ZIP archive

说明

ZipArchive::setArchiveComment ( string $comment ) : bool

Set the comment of a ZIP archive.

参数

comment

The contents of the comment.

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

范例

Example #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';
}
?>

User Contributed Notes

solrac at ragnarockradio dot com 22-Nov-2016 07:25
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';
}
?>
stanislav dot eckert at vizson dot de 12-May-2015 09:32
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=gb2312");