使用过期日期在服务器上缓存 JSON?
Caching JSON on server using expiration date?
这是我编写的一些工作代码,用于调用 JSON 文件并将其缓存在我的服务器上。
我正在调用缓存文件。如果该文件存在,我将在其上使用 json_decode。如果文件不存在,我会调用 JSON 并对其进行解码。然后在调用 JSON url 之后,我将内容写入缓存文件 url.
$cache = @file_get_contents('cache/'.$filename.'.txt');
//check to see if file exists:
if (strlen($cache)<1) {
// file is empty
echo '<notcached />';
$JSON1= @file_get_contents($url);
$JSON_Data1 = json_decode($JSON1);
$myfile = fopen('cache/'.$filename.'.txt', "w");
$put = file_put_contents('cache/'.$filename.'.txt', ($JSON1));
} else {
//if file doesn't exist:
$JSON_Data1 = json_decode($cache);
echo '<cached />';
}
除了使用 if (strlen($cache)<1) {
,有没有一种方法可以检查 $filename.txt 的使用年限,如果超过 30 天,则获取 JSON url 在 else 语句中?
您可以使用
$file = 'cache/'.$filename.'.txt';
$modify = filemtime($file);
//check to see if file exists:
if ($modify == false || $modify < strtotime('now -30 day')) {
// file is empty, or too old
echo '<notcached />';
} else {
// Good to use file
echo '<cached />';
}
filemtime()
returns文件的最后修改时间,if语句检查文件是否存在(filemtime
returns如果失败则为false)或者文件最后一次修改是在 30 多天前。
或者...
检查文件是否存在或太旧(没有警告)
$file = 'cache/'.$filename.'.txt';
if (file_exists($file) == false || filemtime($file) < strtotime('now -30 day')) {
// file is empty, or too old
echo '<notcached />';
} else {
// Good to use file
echo '<cached />';
}
我在以前的项目中使用过一个简单的文件缓存 class,我认为这应该对您有所帮助。我认为这很容易理解,缓存时间以秒为单位,setFilename
函数清除文件名以防它包含无效字符。
<?php
class SimpleFileCache
{
var $cache_path = 'cache/';
var $cache_time = 3600;
var $cache_file;
function __construct($name)
{
$this->setFilename($name);
}
function getFilename()
{
return $this->cache_file;
}
function setFilename($name)
{
$this->cache_file = $this->cache_path . preg_replace('/[^0-9a-z\.\_\-]/', '', strtolower($name));
}
function isCached()
{
return (file_exists($this->cache_file) && (filemtime($this->cache_file) + $this->cache_time >= time()));
}
function getData()
{
return file_get_contents($this->cache_file);
}
function setData($data)
{
if (!empty($data)) {
return file_put_contents($this->cache_file, $data) > 0;
}
return false;
}
}
可以这样用
<?php
require_once 'SimpleFileCache.php';
$cache = new SimpleFileCache('cache.json');
if ($cache->isCached()) {
$json = $cache->getData();
} else {
$json = json_encode($someData); // set your cache data
$cache->setData($json);
}
header('Content-type: application/json');
echo $json;
这是我编写的一些工作代码,用于调用 JSON 文件并将其缓存在我的服务器上。
我正在调用缓存文件。如果该文件存在,我将在其上使用 json_decode。如果文件不存在,我会调用 JSON 并对其进行解码。然后在调用 JSON url 之后,我将内容写入缓存文件 url.
$cache = @file_get_contents('cache/'.$filename.'.txt');
//check to see if file exists:
if (strlen($cache)<1) {
// file is empty
echo '<notcached />';
$JSON1= @file_get_contents($url);
$JSON_Data1 = json_decode($JSON1);
$myfile = fopen('cache/'.$filename.'.txt', "w");
$put = file_put_contents('cache/'.$filename.'.txt', ($JSON1));
} else {
//if file doesn't exist:
$JSON_Data1 = json_decode($cache);
echo '<cached />';
}
除了使用 if (strlen($cache)<1) {
,有没有一种方法可以检查 $filename.txt 的使用年限,如果超过 30 天,则获取 JSON url 在 else 语句中?
您可以使用
$file = 'cache/'.$filename.'.txt';
$modify = filemtime($file);
//check to see if file exists:
if ($modify == false || $modify < strtotime('now -30 day')) {
// file is empty, or too old
echo '<notcached />';
} else {
// Good to use file
echo '<cached />';
}
filemtime()
returns文件的最后修改时间,if语句检查文件是否存在(filemtime
returns如果失败则为false)或者文件最后一次修改是在 30 多天前。
或者... 检查文件是否存在或太旧(没有警告)
$file = 'cache/'.$filename.'.txt';
if (file_exists($file) == false || filemtime($file) < strtotime('now -30 day')) {
// file is empty, or too old
echo '<notcached />';
} else {
// Good to use file
echo '<cached />';
}
我在以前的项目中使用过一个简单的文件缓存 class,我认为这应该对您有所帮助。我认为这很容易理解,缓存时间以秒为单位,setFilename
函数清除文件名以防它包含无效字符。
<?php
class SimpleFileCache
{
var $cache_path = 'cache/';
var $cache_time = 3600;
var $cache_file;
function __construct($name)
{
$this->setFilename($name);
}
function getFilename()
{
return $this->cache_file;
}
function setFilename($name)
{
$this->cache_file = $this->cache_path . preg_replace('/[^0-9a-z\.\_\-]/', '', strtolower($name));
}
function isCached()
{
return (file_exists($this->cache_file) && (filemtime($this->cache_file) + $this->cache_time >= time()));
}
function getData()
{
return file_get_contents($this->cache_file);
}
function setData($data)
{
if (!empty($data)) {
return file_put_contents($this->cache_file, $data) > 0;
}
return false;
}
}
可以这样用
<?php
require_once 'SimpleFileCache.php';
$cache = new SimpleFileCache('cache.json');
if ($cache->isCached()) {
$json = $cache->getData();
} else {
$json = json_encode($someData); // set your cache data
$cache->setData($json);
}
header('Content-type: application/json');
echo $json;