【问题标题】:PHP unzip file into directory, change unzipped folder's namePHP解压缩文件到目录,更改解压缩文件夹的名称
【发布时间】:2015-12-26 02:17:30
【问题描述】:

是否可以拦截目录的解压来更改解压后的文件夹名称?

我正在使用 PHP ZipArchive 类来执行此操作。解压工作正常,我只想在解压后的文件夹名称中添加一个时间戳。

$zip = new ZipArchive;
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
    $zip->extractTo($destinationFolder);
    $zip->close();
} else {
    return FALSE;
}

编辑:为了进一步解释需要,我的功能目前正在解压缩时覆盖同名文件夹。我希望将时间戳附加到新文件夹以防止这种情况发生。

【问题讨论】:

  • 您是否尝试过在成功解压缩后重命名文件夹?
  • 问题是它覆盖了同名的文件夹...添加时间戳可以防止这种情况发生。
  • 另一种选择是将其解压缩到一个临时文件夹中,其中内容无关紧要,可以随意覆盖,然后将文件夹移动到其最终的位置并使用新名称。 - 这通常是网站上文件上传的方式,因此如果上传中途取消,您不会有一堆损坏的文件漂浮在周围。
  • 您可以使用milliseconds 作为文件夹名称,这样您最终会得到一个唯一的timestamp

标签: php unzip file-rename ziparchive php-zip-archive


【解决方案1】:

我假设您需要将文件解压缩到具有当前日期的特定文件夹,基于此,您可以尝试:

$zipFile = "test.zip";
$fnNoExt = basename($zipFile, ".zip");
$date = new DateTime();
$now = $date->getTimestamp();
$destinationFolder = "/some/path/$fnNoExt-$now";

$zip = new ZipArchive;
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
    if(!is_dir($destinationFolder)){
        mkdir($destinationFolder,  0777);
    }
    $zip->extractTo($destinationFolder);
    $zip->close();
} else {
    return FALSE;
}

它将获取当前的Timestamp并将其附加到文件夹名称中,如果该文件夹不存在,则创建它并解压缩到它。


更新:

我已经更新了代码,所以它得到了不带扩展名的zipFilename,并将它用于新的目录名,在这种情况下,它将创建一个名为test-1443467510的新目录


注意:
确保您已写入权限/some/path/

【讨论】:

  • 还有一个问题 - 是否可以只将 zip 中的文件提取到这个新文件夹中,而不是将解压缩的文件夹嵌套在新文件夹中?现在它的结构为uploads/new_folder_timestamp/new_folder/files,但最好只使用uploads/new_folder_timestamp/files
猜你喜欢
  • 2013-12-29
  • 2010-09-05
  • 2013-03-09
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多