PHP自定义缓存

<?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');

猜你喜欢

转载自blog.csdn.net/weixin_42085115/article/details/81063095