• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ZipArchive::setArchiveComment()

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

    Set 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

    范例

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