PHP自定义缓存
程序员文章站
2022-05-19 15:32:14
...
<?php
class File {
private $_dir;//定义缓存文件目录
const EXT = '.txt';//定义后缀名
public function __construct() {
$this->_dir = dirname(__FILE__) . '/files/';//设置缓存文件目录
}
/*
$key 缓存文件名,包含目录
$value 缓存文件内容,当输入为null时删除缓存,可为字符串或数组
$cacheTime 设置缓存时间,单位为秒
*/
public function cacheData($key, $value = '', $cacheTime = 0) {
$filename = $this->_dir . $key . self::EXT;
if($value !== '') { // 如果没有改缓存时,将value值写入缓存
if(is_null($value)) {
return @unlink($filename);
}
$dir = dirname($filename);
if(!is_dir($dir)) {
mkdir($dir, 0777);
}
$cacheTime = sprintf('%011d', $cacheTime);//设置该缓存时的时间,并拼接到数据中
return file_put_contents($filename,$cacheTime . json_encode($value));
}
if(!is_file($filename)) {
return FALSE;
}
$contents = file_get_contents($filename);//有该缓存时读取缓存
$cacheTime = (int)substr($contents, 0 ,11);
$value = substr($contents, 11);
if($cacheTime !=0 && ($cacheTime + filemtime($filename) < time())) {//filemtime()该文件上次修改内容
unlink($filename);//超过该缓存时间后删除该缓存
return FALSE;
}
return json_decode($value, true);
}
}
$file = new File();
echo $file->cacheData('test1');