如何使用PHP从zip文件夹中提取文件,同时保留文件的原始时间戳?


How can I extract files from a zip folder using PHP while retaining the files original timestamps?

我的服务器上有一个zip文件夹,其中包含一个复杂的文件结构和数百个具有不同时间戳的文件。

我一直在使用php的ZipArchive来提取我需要的一切,它的工作很棒,除了所有的时间戳,一旦提取是当前的日期/时间。

如何使用PHP从zip文件夹中提取文件,同时保留文件的原始时间戳?

您可以尝试tar.gz格式。如果使用windows可以使用7 zip

如果您使用的是Linux,则有tar default命令。或php语法http://www.php.net/manual/en/phardata.extractto.php

它们都将保留原始时间戳

我没有找到一种方法来做我想要的zip文件夹。

相反,我创建了一个.tar.gz文件,并使用Archive_Tar类提取文件夹和文件。要使用Archive_Tar,服务器需要运行PHP 5.3+并安装PEAR。

require_once 'Archive/Tar.php'; 
$path = '';
$import_file_path = $path."/report_import.tar.gz";
if(file_exists($import_file_path)){
    $tar = new Archive_Tar($import_file_path, true);
    $result = $tar->extract($path);
}

没有通过PHP ZipArchive库提取文件的直接方法,同时在存档中保留原始时间戳。但是,通过读取调用ZipArchive::statName()返回的'mtime'变量,可以从存档中读取存档中最后修改的时间戳中的每个文件。您可以为每个文件存储此结果,然后使用PHP的touch()函数在文件系统中手动设置提取文件的时间戳。

您可能最好调用unzip或使用exec()的其他工具,它在默认情况下保留时间戳或使用简单的选项参数。