本文主要介绍,解决
PHP微信开发时数据
缓存的问题,这里用
Cache 类举例说明,具有参考价值,感兴趣的小伙伴可以参考下
用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set、get一下就完了。现在没框架可用了,只好自己动手写一个cache暂时用。
这个Cache类用来缓存一些具有时效性的数据,比如微信基础接口的access_token、网页Auth验证的access_token等
下面的代码使用本地文件进行数据的缓存,
//测试
$cache
=
new
Cache();
$cache
->dir =
"../cc/"
;
//$cache->setCache("zhang", "zhangsan", 100);
echo
$cache
->getCache(
"zhang"
);
//$cache->removeCache("zhang");
$cache
->setCache(
"liu"
,
"liuqi"
, 100);
echo
$cache
->getCache(
"liu"
);
class
Cache{
public
$cacheFile
=
"cache.json"
;
//文件
public
$dir
=
"./cach2/"
;
//目录
//缓存
public
function
setCache(
$name
,
$val
,
$expires_time
){
$file
=
$this
->hasFile();
//字符串转数组
$str
=
file_get_contents
(
$file
);
$arr
= json_decode(
$str
, true);
//值为空,则移除该缓存
if
(
empty
(
$val
)){
unset(
$arr
[
$name
]);
}
else
{
$arr
[
$name
] =
array
(
"value"
=>
$val
,
"expires_time"
=>
$expires_time
,
"add_time"
=>time());
}
//数组转字符串
$str
= json_encode(
$arr
);
file_put_contents
(
$file
,
$str
);
}
public
function
getCache(
$name
){
$file
=
$this
->hasFile();
//字符串转数组
$allArr
= json_decode(
$str
, true);
$arr
=
$allArr
[
$name
];
if
(!
$arr
|| time() > (
$arr
[
"expires_time"
] +
$arr
[
"add_time"
])){
$this
->removeCache(
$name
);
//过期移除
return
false;
}
return
$arr
[
"value"
];
}
public
function
removeCache(
$name
){
$this
->setCache(
$name
,
''
, 0);
}
private
function
hasFile(){
//如果不存在缓存文件,则创建一个
if
(!
file_exists
(
$this
->dir)){
mkdir
(
$this
->dir);
}
if
(!
file_exists
(
$this
->dir .
$this
->cacheFile)){
touch(
$this
->dir .
$this
->cacheFile);
}
return
$this
->dir .
$this
->cacheFile;
}
}
|
上面的Cache类共有set、get、remove三种操作。另外还可以自定义缓存文件的保存路径,只要设置Cache的dir属性就可以了。
以上就是PHP 微信开发时数据缓存的方法,希望对大家的学习有所帮助.