1. PclZip 最新消息

英文原文:http://www.phpconcept.net/pclzip/news

译注:

  • 原文中描述了最新消息的 PclZip 版本是 v2.6,而不是翻译时看到的 v2.8.2
  • 因此可忽略本页内容,因为不够新了

1.1. PclZip 2.5 新特性

PclZip v2.5 引入了一个安全功能,以及修改压缩包内的文件名的功能。 为了实现这些功能,进行了大量代码修改,以保证对压缩包内文件列表的属性的维护,而不只是全局参数的维护。

此版本虽然只允许对文件名进行修改,但代码是朝着可操作压缩包内每个文件 (如将一个字符串作为压缩包内一个新文件,修改文件的日期等) 的方向而修改的。不过暂未对解压提供类似的功能。

用户手册暂时还没更新,不过你可先看看下面关于本功能的快速示例:

$archive = new PclZip("archive.zip");
$list = $archive->create(
    [
        [
            PCLZIP_ATT_FILE_NAME => 'data/file1.txt',
            PCLZIP_ATT_FILE_NEW_FULL_NAME => 'newdir/newname.txt'
        ],
        [
            PCLZIP_ATT_FILE_NAME => 'data/file2.txt',
            PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'newfilename.txt'
        ],
        [
            PCLZIP_ATT_FILE_NAME => 'data/file3.txt'
        ]
    ],
    PCLZIP_OPT_ADD_PATH, 'newpath',
    PCLZIP_OPT_REMOVE_PATH, 'data'
);

if ($list == 0) {
    die("ERROR : '" . $archive->errorInfo(true) . "'");
}
  • PCLZIP_ATT_FILE_NEW_FULL_NAME的作用是将data/file1.txt文件修改成newdir/newname.txt, 并且此时全局参数PCLZIP_OPT_ADD_PATHPCLZIP_OPT_REMOVE_PATH都将被忽略。
  • PCLZIP_ATT_FILE_SHORT_NAME的作用是将file2.txt'文件修改成newfilename.txt, 之后全局参数将继续发挥作用。

GulfTech 提出 PclZip 有一个安全隐患,可在解压文件时进行恶意操作。 PclZip 在解压用户上传的 zip 压缩包时,确实可能会对服务器的系统文件进行修改。 PclZip 支持将文件解压到不同的文件夹。 在 v2.5 中添加了一个控制选项,可用于限制被解压的目录,即不能解压到指定目录之外的地方。 此参数的作用类似于 PHP 自带的open_basedir选项。

$archive = new PclZip("archive.zip");
$list = $archive->extract(PCLZIP_OPT_EXTRACT_DIR_RESTRICTION, './base_dir');
if ($list == 0) {
    die("ERROR : '" . $archive->errorInfo(true) . "'");
}

上面示例中,PclZip 会将压缩包解压到当前文件夹。若压缩包内的文件解压后是在base_dir目录之后, PclZip 会自动停止压缩,并发出异常信息。

注意:PCLZIP_OPT_EXTRACT_DIR_RESTRICTION必须是绝对路径(不能是相对路径)。 例外的是:./可以表示当前目录。

最后更新于2010年2月7日(星期日)15:19

1.2. PclZip 2.6 新特性

PclZip v2.6 引入了更多的文件层面的特性。现在你可直接将一个字符串添加到压缩包中作为一个新的文件, 而不需要先在文件系统创建文件再添加到压缩包中。

v2.6 还修复了一些已知问题。

用户手册暂时还没更新,不过你可先看看下面关于本功能的快速示例:

$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(
    [
        [PCLZIP_ATT_FILE_NAME => $v_filename,
            PCLZIP_ATT_FILE_CONTENT => $v_content
        ]
    ]
);

if ($list == 0) {
    die("ERROR : '" . $archive->errorInfo(true) . "'");
}

上面示例中,$v_contenu变量中的字符串将被作为new_file.txt文件直接添加到压缩包中。

最后更新于2010年2月7日(星期日)15:24

results matching ""

    No results matching ""