PHP实现数据缓存的方法利用文件缓存
//本篇代码为我闲时写的,有问题欢迎大家留言 使用方法
//如果文件生产失败,多半是当前文件没有创建文件与目录的权限,请给予权限即可
//这里调用缓存,使用方法类是TP的S方法
if(!$cate = CacheHtml('IndexModelPlodesadasdw')){
$cate = array('asdsad'=>'asdsad','asfqwf'=>'qwfqwf');
//这里生成缓存
CacheHtml('IndexModelPlodesadasdw',100,$cate);
}
print_r($cate);
/**
* [CacheHtml 缓存方法]
* @E-mial wuliqiang_aa@163.com
* @TIME 2017-10-11
* @WEB http://www.swvq.com
* @param [type] $cache [缓存名称]
* @param [type] $cachetime [缓存时间]
* @param [type] $cachedata [缓存的数据]
* @param [type] $cachepath [缓存的路径]
* @param [type] $cachetype [缓存类型]
*/
function CacheHtml($cache,$cachetime=5,$cachedata='',$cachepath='',$cachetype=1){
//检查文件名是否存在特殊字符
$cache = preg_match("/_/",$cache) ? '1' : $cache;
if($cache == 1){
return false;
}
//缓存路径
$cachepath = $cachepath == '' ? $_SERVER['DOCUMENT_ROOT'] : $cachepath;
//缓存目录
$catalog = 'cache';
//文件后缀
$fileSuffix = '.php';
//检查缓存目录是否存在
is_dir($catalog) or @mkdir($cachepath.$catalog, 0777);
//遍历查找该目录下所有文件
$ArrayFile = listDir($cachepath.$catalog);
//把获取掉的文件后缀删除
if(!empty($ArrayFile)){
foreach($ArrayFile as $k=>$v){
//只匹配后缀为.php的
if(mb_substr($v,-4) == '.php'){
//拆分文件名
$getFileNameTime = explode('_',$v);
//获取当前文件的到期时间
$getFileEndTime = $getFileNameTime[count($getFileNameTime)-2];
//把缓存时间到期的文件删除
if(time() >= $getFileEndTime){
//删除到期文件
unlink($cachepath.$catalog.'/'.$v);
return false;
}
//获取文件名
$getFileName = $getFileNameTime[count($getFileNameTime)-1];
//当前文件名等于传入文件名时
if($getFileName == $cache.$fileSuffix){
//合并文件名
$cacheName = $v;
}
}
}
}
//检查缓存是否存在
if(is_file($cachepath.$catalog.'/'.$cacheName)){
//缓存存在则打开
$fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'r');
//读取缓存的数据
$fileData = fread($fileopen,filesize($cachepath.$catalog.'/'.$cacheName));
//将缓存的数据返回
$fileData = json_decode($fileData,true);
}else{
if($cachetime==5 || empty($cachedata)){
return false;
}
//判断数据类型
if(is_string($cachedata)){
//数据为字符串将数据组合为数组并且转换为JSON
$jsonData = json_encode(array($cachedata));
}else{
//数据为数组将数组转换为JSON
$jsonData = json_encode($cachedata);
}
//组合文件名
$cacheName = time().'_'.(time() $cachetime).'_'.$cache.$fileSuffix;
//缓存不存在则创建
$fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'w ');
//将缓存的数据写入文件
$fileData = fwrite($fileopen,$jsonData);
}
//关闭
fclose($fileopen);
return $fileData;
}
/**
* [listDir 遍历目录下所有文件]
* @E-mial wuliqiang_aa@163.com
* @TIME 2017-10-11
* @WEB http://www.swvq.com
* @param [type] $dir [要遍历的路径]
* @return [type] [description]
*/
function listDir($dir) {
if(!is_dir($dir)) {
return false;
}
if(!$dh = opendir($dir)) {
return false;
}
while(($file = readdir($dh)) !== false) {
if((is_dir($dir."/".$file)) && $file!="." && $file!="..") {
$arr[] = $file;
&n本文出至:学新通博客网络博客bsp; listDir($dir."/".$file."/");
} else {
if($file!="." && $file!="..") {
$arr[] = $file;
}
}
}
closedir($dh);
return $arr;
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanecbk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13