php中files方式缓存,【thinkphp3.2.x】thinkphp3.2.x中有关file文件缓存相关的文件

一、file文件缓存类文件:'mytp\ThinkPHP\Library\Think\Cache\Driver\File.class.php'

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

namespace Think\Cache\Driver;

use Think\Cache;

defined('THINK_PATH') or exit();

/**

* 文件类型缓存类

*/

class File extends Cache {

/**

* 架构函数

* @access public

*/

public function __construct($options=array()) {

if(!empty($options)) {

$this->options = $options;

}

$this->options['temp'] = !empty($options['temp'])? $options['temp'] : C('DATA_CACHE_PATH');

$this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX');

$this->options['expire'] = isset($options['expire'])? $options['expire'] : C('DATA_CACHE_TIME');

$this->options['length'] = isset($options['length'])? $options['length'] : 0;

if(substr($this->options['temp'], -1) != '/') $this->options['temp'] .= '/';

$this->init();

}

/**

* 初始化检查

* @access private

* @return boolean

*/

private function init() {

// 创建应用缓存目录

if (!is_dir($this->options['temp'])) {

mkdir($this->options['temp']);

}

}

/**

* 取得变量的存储文件名

* @access private

* @param string $name 缓存变量名

* @return string

*/

private function filename($name) {

$name=md5($name);

if(C('DATA_CACHE_SUBDIR')) {

// 使用子目录

$dir ='';

for($i=0;$i

$dir.=$name{$i}.'/';

}

if(!is_dir($this->options['temp'].$dir)) {

mkdir($this->options['temp'].$dir,0755,true);

}

$filename=$dir.$this->options['prefix'].$name.'.php';

}else{

$filename=$this->options['prefix'].$name.'.php';

}

return $this->options['temp'].$filename;

}

/**

* 读取缓存

* @access public

* @param string $name 缓存变量名

* @return mixed

*/

public function get($name) {

$filename = $this->filename($name);

if (!is_file($filename)) {

return false;

}

N('cache_read',1);

$content = file_get_contents($filename);

if( false !== $content) {

$expire = (int)substr($content,8, 12);

if($expire != 0 && time() > filemtime($filename) + $expire) {

//缓存过期删除缓存文件

unlink($filename);

return false;

}

if(C('DATA_CACHE_CHECK')) {//开启数据校验

$check = substr($content,20, 32);

$content = substr($content,52, -3);

if($check != md5($content)) {//校验错误

return false;

}

}else {

$content = substr($content,20, -3);

}

if(C('DATA_CACHE_COMPRESS') && function_exists('gzcompress')) {

//启用数据压缩

$content = gzuncompress($content);

}

$content = unserialize($content);

return $content;

}

else {

return false;

}

}

/**

* 写入缓存

* @access public

* @param string $name 缓存变量名

* @param mixed $value 存储数据

* @param int $expire 有效时间 0为永久

* @return boolean

*/

public function set($name,$value,$expire=null) {

N('cache_write',1);

if(is_null($expire)) {

$expire = $this->options['expire'];

}

$filename = $this->filename($name);

$data = serialize($value);

if( C('DATA_CACHE_COMPRESS') && function_exists('gzcompress')) {

//数据压缩

$data = gzcompress($data,3);

}

if(C('DATA_CACHE_CHECK')) {//开启数据校验

$check = md5($data);

}else {

$check = '';

}

$data = "<?php \n//".sprintf('%012d',$expire).$check.$data."\n?>";

$result = file_put_contents($filename,$data);

if($result) {

if($this->options['length']>0) {

// 记录缓存队列

$this->queue($name);

}

clearstatcache();

return true;

}else {

return false;

}

}

/**

* 删除缓存

* @access public

* @param string $name 缓存变量名

* @return boolean

*/

public function rm($name) {

return unlink($this->filename($name));

}

/**

* 清除缓存

* @access public

* @param string $name 缓存变量名

* @return boolean

*/

public function clear() {

$path = $this->options['temp'];

$files = scandir($path);

if($files){

foreach($files as $file){

if ($file != '.' && $file != '..' && is_dir($path.$file) ){

array_map( 'unlink', glob( $path.$file.'/*.*' ) );

}elseif(is_file($path.$file)){

unlink( $path . $file );

}

}

return true;

}

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值