ZipArchive 忽略放在 .zip 文件中的文件的 date_default_timezone

我在7.0.33Linux 服务器(共享网络托管)上运行 PHP。


有了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?


我已经阅读了这篇文章,但它已经很老了。


大话西游666
浏览 166回答 3
3回答

繁星点点滴滴

ZipArchive 不支持此功能。我建议您使用简单的包装器来处理 zips - ZipStream-PHP您的基本用例如下所示:$resultArchive = fopen($pathZip, 'w');$options = new ZipStream\Option\Archive();$options->setSendHttpHeaders(false);$options->setOutputStream($resultArchive);$zip = new ZipStream\ZipStream('example.zip', $options);foreach($fileList as $fileName => $fileContents){    $fileOptions = new ZipStream\Option\File();    $fileOptions->setTime(new \DateTime()); // set your custom date, by default is NOW    $zip->addFile($fileName, $fileContents, $fileOptions);}$zip->finish();fclose($resultArchive);

守着一只汪

将文件日期存储在 zip 中将始终使用文件系统日期,因为添加文件时没有更改文件日期的功能,您可以在添加文件之前touch()文件。时区设置仅用于显示时间,设置时区不影响时间戳。$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;结果:15695685871569568587您可以获取时区的偏移量并更改时间。$offset = $date2->getOffset();$newTime = $date2->getTimestamp() + $offset;$res = touch($fileName, $newTime);

富国沪深

文件上传时间与服务器时间有关。所以,你可以做一个技巧来做到这一点。例如,在 db 上存储文件上传时间 (upload_time, upload_my_time)
打开App,查看更多内容
随时随地看视频慕课网APP