gpt4 book ai didi

php - PHP 中的 5 分钟文件缓存

转载 作者:IT王子 更新时间:2023-10-29 01:20:35 25 4
gpt4 key购买 nike

我有一个非常简单的问题:用 PHP 下载文件的最佳方法是什么,但前提是本地版本已在 5 分钟前下载完毕?

在我的实际情况下,我想从我目前使用的远程托管的 csv 文件中获取数据

$file = file_get_contents($url);

没有任何本地副本或缓存。将其转换为缓存版本的最简单方法是什么,最终结果不会改变($file 保持不变),但如果不久前(比如 5 分钟)获取它,它会使用本地副本?

最佳答案

使用本地缓存文件,使用前检查文件是否存在和修改时间即可。例如,如果 $cache_file 是本地缓存文件名:

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);
}

(未经测试,但基于我目前使用的代码。)

通过这段代码,$file 最终会成为您需要的数据,如果它是新鲜的,它将使用缓存,如果不是,则从远程服务器获取数据并刷新缓存。

编辑:自从我写了上面的内容后,我对文件锁定有了更多的了解。可能值得一读 this answer如果您担心文件锁定在这里。

如果您担心锁定和并发访问,我认为最干净的解决方案是将 file_put_contents 放入一个临时 文件,然后 rename()它在 $cache_file 上,这应该是一个原子操作,即 $cache_file 要么是旧内容,要么是完整的新内容,绝不会中途写入。

关于php - PHP 中的 5 分钟文件缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com