ZipArchive игнорирует date_default_timezone_set для файлов, помещенных в ZIP-файл - PullRequest
0 голосов
/ 23 сентября 2019

Я использую PHP 7.0.33 на сервере Linux (общий веб-хостинг).

С date_default_timezone_set('Europe/Rome'); Я могу правильно установить часовой пояс.

echo date('Y-m-d H:i:s'); показывает правильную дату-время.

Но файлы, добавленные в .zip с ZipArchive, получают дату-время сервера.

Здеськод, который я использую для архивирования файлов:

$zip = new ZipArchive;
$zip->open($pathZip, ZipArchive::CREATE);
foreach($fileList as $fileName => $fileContents)
{
    $zip->addFromString($fileName, $fileContents);
}
$zip->close();
// Note: I removed all try-catch and false returns checks to simplify the code

Как добавить файлы в .zip, поддерживая часовой пояс, установленный с date_default_timezone_set, возможно, используя ZipArchive?

Я ужепрочитайте этот пост на SO, но он довольно старый.

1 Ответ

0 голосов
/ 27 сентября 2019

Хранение даты файла в zip-архиве всегда будет использовать дату файловой системы, так как при добавлении файла нет функции, позволяющей изменить дату файла, вы можете коснуться () файла перед его добавлением.

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

$date1   = new DateTime('now', new DateTimeZone("UTC"));
$date2   = new DateTime('now', new DateTimeZone('Europe/Rome'));
echo $date1->getTimestamp() . PHP_EOL;
echo $date2->getTimestamp() . PHP_EOL;

Результат:

1569568587
1569568587

Вы можете получить смещениечасовой пояс и изменить время.

$offset = $date2->getOffset();
$newTime = $date2->getTimestamp() + $offset;
$res = touch($fileName, $newTime);
...