ZipArchive::setArchiveComment
(PHP 5 >= 5.2.0, PECL zip >= 1.4.0)
ZipArchive::setArchiveComment — Set the comment of a ZIP archive
Description
bool ZipArchive::setArchiveComment
( string
$comment
)Set the comment of a ZIP archive.
Parameters
-
comment
-
The contents of the comment.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
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';
}
?>
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для сжатия и архивации
- Zip
- Функция ZipArchive::addEmptyDir() - Добавляет новую директорию
- Функция ZipArchive::addFile() - Добавляет в ZIP-архив файл по указанному пути
- Функция ZipArchive::addFromString() - Добавяет файл в ZIP-архив, используя его содержимое
- Функция ZipArchive::addGlob() - Add files from a directory by glob pattern
- Функция ZipArchive::addPattern() - Add files from a directory by PCRE pattern
- Функция ZipArchive::close() - Закрывает активный архив (открытый или вновь созданный)
- Функция ZipArchive::deleteIndex() - Удаляет элемент в архиве, используя его индекс
- Функция ZipArchive::deleteName() - Удаляет элемент в архиве, используя его имя
- Функция ZipArchive::extractTo() - Извлекает содержимое архива
- Функция ZipArchive::getArchiveComment() - Возвращает комментарий ZIP-архива
- Функция ZipArchive::getCommentIndex() - Возвращает комментарий элемента, используя его индекс
- Функция ZipArchive::getCommentName() - Возвращает комментарий элемента, используя его имя
- Функция ZipArchive::getExternalAttributesIndex() - Retrieve the external attributes of an entry defined by its index
- Функция ZipArchive::getExternalAttributesName() - Retrieve the external attributes of an entry defined by its name
- Функция ZipArchive::getFromIndex() - Возвращает содержимое элемента по его индексу
- Функция ZipArchive::getFromName() - Возвращает содержимое элемента по его имени
- Функция ZipArchive::getNameIndex() - Возвращает имя элемента по его индексу
- Функция ZipArchive::getStatusString() - Возвращают статус сообщения об ошибке, системный и/или zip-статус
- Функция ZipArchive::getStream() - Получить дескриптор файла элемента, определенный по имени элемента (только для чтения)
- Функция ZipArchive::locateName() - Возвращает индекс элемента в архиве
- Функция ZipArchive::open() - Открывает ZIP-архив
- Функция ZipArchive::renameIndex() - Переименовывает элемент по его индексу
- Функция ZipArchive::renameName() - Переименовывает элемент по его имени
- Функция ZipArchive::setArchiveComment() - Устанавливает комментарий к ZIP-архиву
- Функция ZipArchive::setCommentIndex() - Устанавливает комментарий к элементу по его индексу
- Функция ZipArchive::setCommentName() - Устанавливает комментарий к элементу, заданному по имени
- ZipArchive::setCompressionIndex
- ZipArchive::setCompressionName
- Функция ZipArchive::setExternalAttributesIndex() - Set the external attributes of an entry defined by its index
- Функция ZipArchive::setExternalAttributesName() - Set the external attributes of an entry defined by its name
- ZipArchive::setPassword
- Функция ZipArchive::statIndex() - Получение детальной информации о элементе по его индексу
- Функция ZipArchive::statName() - Получение детальной информации о элементе по его имени
- Функция ZipArchive::unchangeAll() - Отменяет все изменения, сделанные в архиве
- Функция ZipArchive::unchangeArchive() - Возвращает все глобальные изменения, сделанные в архиве
- Функция ZipArchive::unchangeIndex() - Отменяет все измения у позиции с заданным индексом
- Функция ZipArchive::unchangeName() - Отменяет все измения у позиции с заданным именем
Коментарии
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';
}
?>
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();
}
}
?>