PHP - 下载文件并保留时间戳?

PHP - Download file and preserve timestamp?

顾名思义,有没有一种快速下载文件的方法,但要带上时间戳?

我正在编写一个基本缓存,除其他检查外,它还确定(通过 get_headers)给定的本地文件是否与其远程副本相同。

我知道我可以 file_get_contents / file_put_contents 然后 touch() 包含 get_headers 结果的文件,但是正在进行另一个 HTTP 调用的调用(甚至如果它是一个 HEAD 调用),我只想在万不得已时测试 Last-Modified。

那么有没有一种快速的 "one HTTP call" 方法来下载文件并保留时间戳?一些远程文件位于 FTP 服务器上,但许多是文本文件,和/或位于网络服务器上。

编辑:有人提出了一个相关问题,但我的问题有所不同,因为我希望获得远程修改日期而不必进行第二次调用,基于 copy() 的答案表明

$http_response_header 似乎可以解决问题,如下所示。

您可以使用 filemtime() 获取最后修改日期,然后使用 touch() 修改最后修改 date/time

来源:PHP copy file without changing the last modified date

您可以从 $http_response_header 获取缓存 Last-Modified 并使用它来访问文件。

完全自动化显然是不可能的,因为流不知道你要把它存储在哪里。

if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 5 ))) {
   // Cache file is less than five minutes old. 
   // Don't bother refreshing, just use the file as-is.
   $file = file_get_contents($cache_file);
} else {
   // Our cache is out-of-date, so load the data from our remote server,
   // and also save it over our cache for next time.
   $file = file_get_contents($url);
   file_put_contents($cache_file, $file, LOCK_EX);
}