工业自动化网
发布采购单
官方微信 精彩呈现

PHP实现数据缓存的方法利用文件缓存

   日期:2020-07-26     浏览:54    
核心提示://如果文件生产失败,多半是当前文件没有创建文件与目录的权限,请给予权限即可//这里调用缓存,使用方法类是TP的S方法if(!$cate
 
  1. //如果文件生产失败,多半是当前文件没有创建文件与目录的权限,请给予权限即可
  2.  
    //这里调用缓存,使用方法类是TP的S方法
  3.  
    if(!$cate = CacheHtml('IndexModelPlodesadasdw')){
  4.  
    $cate = array('asdsad'=>'asdsad','asfqwf'=>'qwfqwf');
  5.  
    //这里生成缓存
  6.  
    CacheHtml('IndexModelPlodesadasdw',100,$cate);
  7.  
    }
  8.  
    print_r($cate);
  9.  
     
  10.  
  11.  
    function CacheHtml($cache,$cachetime=5,$cachedata='',$cachepath='',$cachetype=1){
  12.  
    //检查文件名是否存在特殊字符
  13.  
    $cache = preg_match("/_/",$cache) ? '1' : $cache;
  14.  
    if($cache == 1){
  15.  
    return false;
  16.  
    }
  17.  
    //缓存路径
  18.  
    $cachepath = $cachepath == '' ? $_SERVER['document_ROOT'] : $cachepath;
  19.  
    //缓存目录
  20.  
    $catalog = 'cache';
  21.  
    //文件后缀
  22.  
    $fileSuffix = '.php';
  23.  
    //检查缓存目录是否存在
  24.  
    is_dir($catalog) or @mkdir($cachepath.$catalog, 0777);
  25.  
    //遍历查找该目录下所有文件
  26.  
    $ArrayFile = listDir($cachepath.$catalog);
  27.  
    //把获取掉的文件后缀删除
  28.  
    if(!empty($ArrayFile)){
  29.  
    foreach($ArrayFile as $k=>$v){
  30.  
    //只匹配后缀为.php的
  31.  
    if(mb_substr($v,-4) == '.php'){
  32.  
    //拆分文件名
  33.  
    $getFileNameTime = explode('_',$v);
  34.  
    //获取当前文件的到期时间
  35.  
    $getFileEndTime = $getFileNameTime[count($getFileNameTime)-2];
  36.  
    //把缓存时间到期的文件删除
  37.  
    if(time() >= $getFileEndTime){
  38.  
    //删除到期文件
  39.  
    unlink($cachepath.$catalog.'/'.$v);
  40.  
    return false;
  41.  
    }
  42.  
    //获取文件名
  43.  
    $getFileName = $getFileNameTime[count($getFileNameTime)-1];
  44.  
    //当前文件名等于传入文件名时
  45.  
    if($getFileName == $cache.$fileSuffix){
  46.  
    //合并文件名
  47.  
    $cacheName = $v;
  48.  
    }
  49.  
    }
  50.  
    }
  51.  
    }
  52.  
    //检查缓存是否存在
  53.  
    if(is_file($cachepath.$catalog.'/'.$cacheName)){
  54.  
    //缓存存在则打开
  55.  
    $fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'r');
  56.  
    //读取缓存的数据
  57.  
    $fileData = fread($fileopen,filesize($cachepath.$catalog.'/'.$cacheName));
  58.  
    //将缓存的数据返回
  59.  
    $fileData = json_decode($fileData,true);
  60.  
    }else{
  61.  
    if($cachetime==5 || empty($cachedata)){
  62.  
    return false;
  63.  
    }
  64.  
    //判断数据类型
  65.  
    if(is_string($cachedata)){
  66.  
    //数据为字符串将数据组合为数组并且转换为JSON
  67.  
    $jsonData = json_encode(array($cachedata));
  68.  
    }else{
  69.  
    //数据为数组将数组转换为JSON
  70.  
    $jsonData = json_encode($cachedata);
  71.  
    }
  72.  
    //组合文件名
  73.  
    $cacheName = time().'_'.(time()+$cachetime).'_'.$cache.$fileSuffix;
  74.  
    //缓存不存在则创建
  75.  
    $fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'w+');
  76.  
    //将缓存的数据写入文件
  77.  
    $fileData = fwrite($fileopen,$jsonData);
  78.  
    }
  79.  
    //关闭
  80.  
    fclose($fileopen);
  81.  
    return $fileData;
  82.  
    }
  83.  
  84.  
    function listDir($dir) {
  85.  
    if(!is_dir($dir)) {
  86.  
    return false;
  87.  
    }
  88.  
    if(!$dh = opendir($dir)) {
  89.  
    return false;
  90.  
    }
  91.  
    while(($file = readdir($dh)) !== false) {
  92.  
    if((is_dir($dir."/".$file)) && $file!="." && $file!="..") {
  93.  
    $arr[] = $file;
  94.  
    listDir($dir."/".$file."/");
  95.  
    } else {
  96.  
    if($file!="." && $file!="..") {
  97.  
    $arr[] = $file;
  98.  
    }
  99.  
    }
  100.  
    }
  101.  
    closedir($dh);
  102.  
    return $arr;
  103.  
    }
 
打赏
 
更多>同类技术

推荐图文
推荐技术
点击排行
工业自动化网
产品检索: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Processed in 1,597,263,756.499 second(s), 15 queries, Memory 0.66 M