Php 保留从 zip 中提取的文件的修改日期
Php keep the modified date of files extracted from the zip
我正在使用 ZipArchive
从 zip
中提取文件
这是我正在使用的代码
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$zip->extractTo('test/');
$zip->close();
}
它工作正常,但提取文件的最后修改日期更改为当前时间。
如何保留提取文件的原始最后修改日期?
有一个 open bug 关于这个问题的 pull request 来修复它,但它还没有被应用
我找到了一种使用 ZipArchive::statIndex
提供的 mtime
值的方法
提取后更改提取文件的修改日期。
这是最终代码:
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$filename = $mtime = $zip->statIndex(0)['name'];
$zip->extractTo('test/');
touch('test/'.$filename, $zip->statIndex(0)['mtime']); // Change the modified date of the extracted file.
$zip->close();
}
我改进了 Badal 的答案以应用于 zip 中的所有文件(目录仍将具有当前时间戳):
$res = $zip->open($filename);
if($res === true) {
$zip->extractTo($dataDir);
for($i=0; $i<$zip->numFiles; $i++){
touch($dataDir . $zip->statIndex($i)['name'], $zip->statIndex($i)['mtime']);
}
$zip->close();
}
在 zip 档案中,日期和时间以标准 MS-DOS 格式编码 (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)。这意味着日期和时间根据创建 zip 存档的系统的本地时间。
statIndex 返回的 mtime 假定创建 zip 存档的系统的本地时间是 UTC (GMT),这很少是真的。
我正在使用 ZipArchive
从 zip
这是我正在使用的代码
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$zip->extractTo('test/');
$zip->close();
}
它工作正常,但提取文件的最后修改日期更改为当前时间。
如何保留提取文件的原始最后修改日期?
有一个 open bug 关于这个问题的 pull request 来修复它,但它还没有被应用
我找到了一种使用 ZipArchive::statIndex
提供的mtime
值的方法
提取后更改提取文件的修改日期。
这是最终代码:
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
$filename = $mtime = $zip->statIndex(0)['name'];
$zip->extractTo('test/');
touch('test/'.$filename, $zip->statIndex(0)['mtime']); // Change the modified date of the extracted file.
$zip->close();
}
我改进了 Badal 的答案以应用于 zip 中的所有文件(目录仍将具有当前时间戳):
$res = $zip->open($filename);
if($res === true) {
$zip->extractTo($dataDir);
for($i=0; $i<$zip->numFiles; $i++){
touch($dataDir . $zip->statIndex($i)['name'], $zip->statIndex($i)['mtime']);
}
$zip->close();
}
在 zip 档案中,日期和时间以标准 MS-DOS 格式编码 (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)。这意味着日期和时间根据创建 zip 存档的系统的本地时间。
statIndex 返回的 mtime 假定创建 zip 存档的系统的本地时间是 UTC (GMT),这很少是真的。