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);
}
顾名思义,有没有一种快速下载文件的方法,但要带上时间戳?
我正在编写一个基本缓存,除其他检查外,它还确定(通过 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);
}