Php сохраняет дату изменения файлов, извлеченных из zip-архива


Я использую ZipArchive для извлечения файлов из zip

Вот код, который я использую

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
    $zip->extractTo('test/');
    $zip->close();
}

Это работает нормально, но дата последнего изменения извлеченных файлов меняется на текущее время.

Как я могу сохранить исходную дату последнего изменения извлеченных файлов?

Author: Badal, 2015-11-25

3 answers

Я нашел способ сделать это, используя mtime значение, предоставленное ZipArchive::statindex

Он изменяет дату изменения извлеченного файла после извлечения.

Вот окончательный код:

$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();
}
 3
Author: Badal, 2015-11-25 09:02:20

Я улучшил ответ Бадала, чтобы применить его ко всем файлам в 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();
}
 1
Author: the_nuts, 2018-04-16 17:22:37

Есть открытая ошибка по этому поводу с запросом на исправление, но она еще не применена

 0
Author: zootropo, 2015-11-25 07:38:42