PHP - PCLZIP добавление файла из строки
PCLZIP - отличная библиотека, но, к сожалению, она плохо документирована. Я использую его для поддержки также серверов, на которых отключен ZipArchive (или не поддерживается версия php)
У меня есть функция для добавления загруженных файлов (один за другим) в ZIP-архив. Если архив не существует, он создает его, если архив существует, он просто добавляет новые файлы.
У меня проблема с функцией добавления файла TXT, основанного на комментариях из архива. (функция читает комментарии, которые были предварительно подготовлены, и должна создать файл TXT из строки и вставить в архив.)
Я не могу найти функцию перезаписать файл из строки (или я не знаю, как его использовать).
Я могу создать это с PCLZIP_ATT_FILE_NAME
, но каким-то образом, когда я запускаю функцию, она создает новый файл.txt (с тем же именем файла!) каждый раз, когда добавляет файл в архив (в отличие от перезаписать существующий), который я пытался использовать PCLZIP_ATT_FILE_NEW_FULL_NAME
- но я не могу найти, где дать ему параметры, какой файл нужно перезаписать..
Функция здесь: (извините, если это долго..)
$archive = new PclZip($zipname);
if (!file_exists($zipname)){ //The Archive already exists - let´s just ADD new files.
$comment = $comment_head . $comment_add ;
$string_content = $comment;
$v_list = $archive->create($file,
PCLZIP_OPT_ADD_PATH, $sitename,
PCLZIP_OPT_COMMENT, $comment,
PCLZIP_OPT_REMOVE_ALL_PATH);
$prop = $archive->properties();
$prop = $prop['comment'];
if (!$prop) {$prop = $comment;}
$list = $archive->add(array(
array(
PCLZIP_ATT_FILE_NAME => $string_file,
PCLZIP_ATT_FILE_CONTENT => $prop,
PCLZIP_ATT_FILE_NEW_FULL_NAME => $string_file
)
)
);
if ($v_list == 0) {
die("Error : ".$archive->errorInfo(true));
}
} else {
// No Archive already exists - Create with new file .
$comment_add = $meta['file'] . PHP_EOL . PHP_EOL ;/*.$comment_foot*/ ;
$b_list = $archive->add($file,
PCLZIP_OPT_ADD_PATH, $sitename,
PCLZIP_OPT_ADD_COMMENT, $comment_add,
PCLZIP_OPT_REMOVE_ALL_PATH);
$prop = $archive->properties();
$prop = $prop['comment'];
if (!$prop) {$prop = $comment;}
$list_6 = $archive->add(array(
array( PCLZIP_ATT_FILE_NAME => $string_file,
PCLZIP_ATT_FILE_CONTENT => $prop
)
)
);
if ($b_list == 0) {
die("Error : ".$archive->errorInfo(true));
}
}
Итак - кто-нибудь знает, как перезаписать файл из строки (а не из файла..) с помощью PCLzip??
1 ответ
$archive = new PclZip("archive.zip");
$v_filename = "new_file.txt";
$v_content = "This is the content of file one\nHello second line";
$list = $archive->create(array(
array( PCLZIP_ATT_FILE_NAME => $v_filename,
PCLZIP_ATT_FILE_CONTENT => $v_content
)
)
);
if ($list == 0) {
die("ERROR : '".$archive->errorInfo(true)."'");
}