分享一个自己写的文件缓存处理代码 [ 1.1 版本 ]
<?php
class FCache{
protected $endTime=360;//缓存保存时间(秒)
protected $fileTime=360;//缓存保存时间(秒)
public $rootDir='../filecache/wap';//主目录地址
public function __construct() {
ob_start();
}
/**
* set設置一致key 修改键名的值
* @param string $key 键名
* @param string $value 键值
* @param int $timeLife 生命周期
* @param int $target 是否为pc目录 true pc端 false wap端
*/
public function set($key, $value,$target=null) {
ob_start();
if($target){
$this->rootDir='./filecache/pc';
}
$retMes=$this->saveDir($value,$key);
return $retMes;
}
/**
* 保存文件
*/
public function saveDir($data,$dirName){
if($data!==null && $dirName!==null){
$fileDir=$this->rootDir.'/'.Yii::app()->controller->id.'/';
if(!is_dir($fileDir)){
mkdir($fileDir,0777,true);
}
$dir=$fileDir.$dirName.'.html';//静态 URL 文件名
if(file_exists($dir) && filemtime($dir)>time()){
file_get_contents($dir);
}else{
file_put_contents($dir,$data);
}
return $fileDir;
}
}
/**
* 清空所有缓存文件
* @param $path 主目录
* @param $target 目录主文件夹
* @return bool
*/
public function emptyCache($path=null){
$target=Yii::app()->params['FCachePath'];
if(!file_exists($target)) return false;
if($path) $target=$path;
$handle = opendir($target);
$op = dir($target);
while(false != ($item = $op->read())) {
if($item == '.' || $item == '..') {
continue;
}elseif(is_dir($op->path.'/'.$item)) {
$this->emptyCache($op->path.'/'.$item);
} else {
unlink($op->path.'/'.$item);
}
$op = dir($target);
}
closedir($handle);
return rmdir($target) ;
}
/**
* 读取文件
*/
public function readDir($dirName,$target=null){
if($target){
$this->rootDir='./filecache/pc';
}
if(Yii::app()->controller->id=='project'){
$this->ChangePStatus($this->rootDir);
}
if($dirName!==null){
$fileDir=$this->rootDir.'/'.Yii::app()->controller->id.'/'.$dirName.'.html';
if(file_exists($fileDir)){
if((Yii::app()->controller->id=='project' && filemtime($fileDir)+$this->endTime*30<time())|| filemtime($fileDir)+$this->fileTime*360<time()){
unlink($fileDir);
$data=false;
}else{
$data=true;
}
}else{
$data=false;
}
}else{
$data=false;
}
return $data;
}
/**
* 读取文件时的判断
*/
protected function ChangePStatus($path){
$p_id=isset($_GET['id'])?$_GET['id']:'';
$model=ProjectModel::model()->findByPk($p_id);
$file_url=$path.'/'.Yii::app()->controller->id.'/'.$this->md5($p_id).'.html';
if($model->attributes['status']==ProjectModel::STATUS_SELL && file_exists($file_url)){
unlink($file_url);
}
}
/**
* 跳转地址
*/
public function readUrl($dirName){
if($dirName!==null){
$fileDir=$this->rootDir.'/'.Yii::app()->controller->id.'/'.$dirName.'.html';
if(file_exists($fileDir)){
return file_get_contents($fileDir);
}
}
}
/**
* 当前文件名
*/
public function filename(){
$url = $_SERVER['REQUEST_URI'];
$filename=explode('/',$url);
$filename=end($filename);
$filename=$filename?explode($filename,'.'):'index';
$filename=$this->md5($filename[0]);
if(isset($_GET['id'])){
$p_id=$_GET['id'];
$model=ProjectModel::model()->findByPk($p_id);
if($model->attributes['status']==ProjectModel::STATUS_SELL){
$filename=$this->md5($p_id.ProjectModel::STATUS_SELL);
}else{
$filename=$this->md5($p_id);
}
}
return $filename;
}
/**
* 文件名加密
*/
public static function md5($name){
$string='fenjinshe';
if($name){
return md5(md5($name).$string);
}
}
/**
* 时间间隔删除缓存
*/
// public function TimeClean(){
// ignore_user_abort(true);
// @set_time_limit(0);
// session_write_close();
// while(true){
// $this->emptyCache();
// sleep(2);
// }
//
// }
}
Real_Madrid
注册时间:2016-11-30
最后登录:2017-01-10
在线时长:0小时11分
最后登录:2017-01-10
在线时长:0小时11分
- 粉丝0
- 金钱15
- 威望10
- 积分115
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 1 条评论
public function emptyCache($path=null){
$target=Yii::app()->params['FCachePath'];
}
FCachePath 是什么
估计是在配置文件中配置的地址参数,楼主没有说明。另外楼主将一些变量写死在了代码里觉得这样会给后期维护带来很大的困难。