讲师中心 微信公众号
AI工具推荐 视频效率加速

用于以文件形式缓存php变量

千浩同学_3680

千浩同学_3680

发布时间:2016-06-01 14:32:57

|

1269人浏览过

|

来源于php中文网

原创

1. [PHP]代码   

<?php
/*
$cache_set = array(
//缓存路径 , 最后要加"/"
'cacheRoot'=>'./cache/',
//缓存时间
'cacheTime'=>20,
//cache type
'cacheType'=>1,
//扩展名
'cacheExe'=>'.php'
);
$cache = new Cache($cache_set);
$a=array('1','2');
$a="aaa";
$b='';
if($cache->cache_is("d")){
    $c=$cache->cache_read("d");
    echo "c";
    print_r($c);
}else {
$b=$cache->cache_data('d',$a);
}
print_r($b);
//$cache->clear("a");
//echo $cache->cache_read("./cache/d.php");
//echo $d;
*/
 
 
/**
 * 数据缓存类 v1.0
 * @author shooke
 * 2009-11-13 16:02:26
 * 用于缓存数据,如变量,但不能缓存页面
 */
class Cache{
    //配置
    public $config = array(
    //缓存路径
    'cacheRoot'=>'./cache/',
    //缓存时间
    'cacheTime'=>1,
    //cache 类型 1串化数据 2变量
    'cacheType'=>2,
    //扩展名
    'cacheExe'=>'.php'
    //转换中间变量
    );
 
    public $return_name=array();
 
    function __construct($cache_set = array())
    {
        if(!empty($cache_set)) $this->config=array_merge($this->config,$cache_set);
        $this->config['ClassName'] = __CLASS__;
    }
 
    public function clear($filename=''){
        if (file_exists($this->cache_file($filename))) {
            @unlink($this->cache_file($filename));
        }elseif (empty($filename)){
            $this->clear_dir($this->config['cacheRoot']);
        }else{
            $this->clear_dir($this->config['cacheRoot'].$filename);
            echo $this->config['cacheRoot'].$filename;
        }
    }
    //循环删除路径
    private function clear_dir($dir,$to = false)
    {
        if ($list = glob($dir.'/*'))
        {
            foreach ($list as $file)
            {
                is_dir($file) ? $this->clear_dir($file) : unlink($file);
            }
        }
 
        if ($to === false) rmdir($dir);
    }
 
    //写入缓存
    private function cache_write($filename, $writetext, $openmod='w'){
        if (!file_exists($filename)) {
            @$this->makeDir( dirname($filename ));
        }
        if(@$fp = fopen($filename, $openmod)) {
            flock($fp, 2);
            fwrite($fp, $writetext);
            fclose($fp);
            return true;
        } else {
            echo "File: $filename write error.";
            return false;
        }
    }
 
    //缓存有效期 有效返回 true
    public function cache_is($fileName){
        $fileName=$this->cache_file($fileName);
        if( file_exists( $fileName ) ) {
            //如果缓存时间为负数则永不过期
            if ($this->config['cacheTime'] < 0) {
                return true;
            }
            //如果缓存时间为0则一直过期
            if ($this->config['cacheTime'] == 0) {
                return false;
            }
            //获取缓存文件的建立时间
            $ctime = intval(filemtime( $fileName ));
            //比较是否大于缓存时间,是则过期 否则不过期
            if (time() - $ctime > $this->config['cacheTime']) {
                return false;
            }else {
                return true;
            }
            //文件不存在视为过期失效
        }else {
            return false;
        }
    }
 
    public function cache_data($name,$data){
        $varname=$name;
        $name = $this->cache_file($name);
        //config['cacheTime']==0也就是不启用缓存是直接返回数据
        if ($this->config['cacheTime'] <> 0) {
            if($this->config['cacheType']==1){
                $write_data = "<?php exit;?>".serialize($data);
                //return $data;
            }else {
                $write_data = "<?php\r\n\$var= ";
                $write_data .= var_export($data,true);
                $write_data .=";\r\n?>";
            }
            $this->cache_write($name,$write_data);
        }
        return $data;
 
    }
    //缓存文件名
    private function cache_file($filename){
        return $this->config['cacheRoot'].$filename.$this->config['cacheExe'];
    }
 
    //读取文件
    public function cache_read($file){
        $file=$this->cache_file($file);
        if (!file_exists($file)) {
            return '';
        }
        if($this->config['cacheType']==1){
            if (function_exists('file_get_contents')){
                $cache_Content= file_get_contents($file);
            }else{
                $fopen = fopen($file,'r');
                $cache_Content = '';
                do {
                    $data = fread($fopen,filesize($file));
                    if (strlen($data)===0) break;
                    $cache_Content .= $data;
                }while(1);
                fclose($fopen);
            }
            $cache_Content = substr($cache_Content,13);/* 去除<?php exit;?> */
            $cache_Content = unserialize($cache_Content);
            return $cache_Content;
        }else{
            include_once($file);
            return $var;
        }
 
    }
 
    //循环创建目录
    private function makeDir( $dir, $mode = 0777 ) {
        if( ! $dir ) return 0;
        $dir = str_replace( "\\", "/", $dir );
        $mdir = "";
        foreach( explode( "/", $dir ) as $val ) {
            $mdir .= $val."/";
            if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;
 
            if( ! file_exists( $mdir ) ) {
                if(!@mkdir( $mdir, $mode )){
                    return false;
                }
            }
        }
        return true;
    }
 
}
?>

                   

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

                   

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

60

2026.10.10

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

20

2026.10.10

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

20

2026.10.10

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

20

2026.10.10

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

20

2026.10.10

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

20

2026.10.10

Kratos框架零基础入门教程
Kratos框架零基础入门教程

本专题整理Kratos框架入门内容,涵盖Go环境准备、kratos CLI安装升级、new命令创建项目、目录结构分层说明、服务启动与双协议端口、依赖下载报错排查,帮助开发者快速跑通第一个Kratos框架微服务应用。

20

2026.10.10

C++条件判断语句怎么写
C++条件判断语句怎么写

C++条件判断是控制程序执行流程的重要基础。本专题介绍if、if-else、else if和switch等常见分支语句,结合条件表达式、比较运算符与代码示例,帮助初学者掌握不同场景下的判断逻辑。

20

2026.10.10

C++变量怎么声明和赋值
C++变量怎么声明和赋值

C++变量是编写程序和存储数据的基础。本专题围绕变量声明、定义、初始化、赋值和类型选择等内容展开,帮助初学者理解不同变量的用法,并掌握在实际代码中定义和使用变量的方法。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn