欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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');
相关标签: PHP 缓存 文件