静态缓存技术
保存在磁盘上的静态文件,用PHP生 成数据到静态文件中。原理如下:
php中的缓存操作
- 生成缓存
- 获取缓存
- 删除缓存
甩一段别人的代码
class Response{
static public function datas($code,$info,$data,$type='json'){
switch ($type) {
case 'json':
# code...
return self::json($code,$info,$data);
break;
case 'xml':
return self::xml($code,$info,$data);
break;
case "array":
$arr=array(
'code'=>$code,
'info'=>$info,
'data'=>$data,
);
var_dump($arr);
break;
default:
# code...
break;
}
}
// xml
static public function xml($code,$info,$data){
if (!is_numeric($code)) { //is_numeric() 函数用于检测变量是否为数字或数字字符串
# code...
return false;
}
if ($info && $data) {
$str=' <?xml version="1.0" encoding="UTF-8">
<item>
<code>'.$code.'</code>
<info>'.$info.'</info>
<data>
';
$str.=self::item($data);
$str.='
</data>
</item> ';
return $str;
}else{
return false;
}
}
//多维数组,使用递归
static public function item($data){
$str="";
# code...
foreach ($data as $key => $value) {
# code...
if (is_array($value)) {
# code...
$str.="<data$key>".self::item($value)."</data$key>\n";
}else{
$str.="<$key>{$value}</$key>";
}
}
return $str;
}
// json
static public function json($code,$info,$data){
if (!is_numeric($code)) {
# code...
return false;
}
if ($info && $data) {
# code...
$arr=array(
'code'=>$code,
'info'=>$info,
'data'=>$data,
);
return json_encode($arr);
}else{
return false;
}
}
}
大概的逻辑是:
通过调用类里面的CacheData函数
- 将缓存文件的路径赋值给$path
- 判断一下缓存文件的路径目录是否存在,不在的话创建一个
- 判断调用此类的CacheData函数是否有出入数据
- 若有
将缓存的时间+数据+时间戳存入缓存文件中
- 若没有
判断文件是否存在、通过判断文件传入的是不是null决定是否删除缓存
4。判断文件是不是过期了 没过期就返回缓存文件里的一部分
需要注意的函数
sprintf('%010d',$time):例如给$time=100 通过函数会0000000100,即不足十位数用0补全
file_put_contents($this->path, $str);,即使.txt文件不存在,也可以用这个函数,函数会在指定目录下创建指定文件,并存入数据。
is_null()具体如下: 在本类中你可以给调用的函数$data赋空值,但是赋null,则会删除缓存。
substr($datas, 0,10); //截取字符串里0~10位
substr($datas, -10); //截取倒数10位
substr($datas,10,-10); //从第十位到倒数第十位。