一个PHP缓存类实例

发布于 2014-08-05 21:44:28 | 104 次阅读 | 评论: 0 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

本文是了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内、清除缓存文件、根据当前动态文件生成缓存文件名、连续创建目录、缓存文件输出静态等功能。对于采用PHP开发CMS系统来说,离不开对缓存的处理,合理利用好缓存可有效的提高程序执行效率。缓存的应用对于php大型项目的开发来说至关重要,需要的朋友可以参考下

php缓存类文件完整代码如下:

/*

* 缓存类 cache

*/

class cache {

//缓存目录

var $cacheRoot = "./cache/";

//缓存更新时间秒数,0为不缓存

var $cacheLimitTime = 0;

//缓存文件名

var $cacheFileName = "";

//缓存扩展名

var $cacheFileExt = "php";

/*

* 构造函数

* int $cacheLimitTime 缓存更新时间

*/

function cache( $cacheLimitTime ) {

if( intval( $cacheLimitTime ) )

$this->cacheLimitTime = $cacheLimitTime;

$this->cacheFileName = $this->getCacheFileName();

ob_start();

}

/*

* 检查缓存文件是否在设置更新时间之内

* 返回:如果在更新时间之内则返回文件内容,反之则返回失败

*/

function cacheCheck(){

if( file_exists( $this->cacheFileName ) ) {

$cTime = $this->getFileCreateTime( $this->cacheFileName );

if( $cTime + $this->cacheLimitTime > time() ) {

echo file_get_contents( $this->cacheFileName );

ob_end_flush();

exit;

}

}

return false;

}

/*

* 缓存文件或者输出静态

* string $staticFileName 静态文件名(含相对路径)

*/

function caching( $staticFileName = "" ){

if( $this->cacheFileName ) {

$cacheContent = ob_get_contents();

ob_end_flush();

if( $staticFileName ) {

$this->saveFile( $staticFileName, $cacheContent );

}

if( $this->cacheLimitTime )

$this->saveFile( $this->cacheFileName, $cacheContent );

}

}

/*

* 清除缓存文件

* string $fileName 指定文件名(含函数)或者all(全部)

* 返回:清除成功返回true,反之返回false

*/

function clearCache( $fileName = "all" ) {

if( $fileName != "all" ) {

$fileName = $this->cacheRoot . strtoupper(md5($fileName)).".".$this->cacheFileExt;

if( file_exists( $fileName ) ) {

return @unlink( $fileName );

}else return false;

}

if ( is_dir( $this->cacheRoot ) ) {

if ( $dir = @opendir( $this->cacheRoot ) ) {

while ( $file = @readdir( $dir ) ) {

$check = is_dir( $file );

if ( !$check )

@unlink( $this->cacheRoot . $file );

}

@closedir( $dir );

return true;

}else{

return false;

}

}else{

return false;

}

}

/*根据当前动态文件生成缓存文件名*/

function getCacheFileName() {

return $this->cacheRoot . strtoupper(md5($_SERVER["REQUEST_URI"])).".".$this->cacheFileExt;

}

/*

* 缓存文件建立时间

* string $fileName 缓存文件名(含相对路径)

* 返回:文件生成时间秒数,文件不存在返回0

*/

function getFileCreateTime( $fileName ) {

if( ! trim($fileName) ) return 0;

if( file_exists( $fileName ) ) {

return intval(filemtime( $fileName ));

}else return 0;

}

/*

* 保存文件

* string $fileName 文件名(含相对路径)

* string $text 文件内容

* 返回:成功返回ture,失败返回false

*/

function saveFile($fileName, $text) {

if( ! $fileName || ! $text ) return false;

if( $this->makeDir( dirname( $fileName ) ) ) {

if( $fp = fopen( $fileName, "w" ) ) {

if( @fwrite( $fp, $text ) ) {

fclose($fp);

return true;

}else {

fclose($fp);

return false;

}

}

}

return false;

}

/*

* 连续建目录

* string $dir 目录字符串

* int $mode 权限数字

* 返回:顺利创建或者全部已建返回true,其它方式返回false

*/

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;

}

}

?>

使用该缓存类的时候可将以上代码保存为cache.php,具体用法如下所示:

include( "cache.php" );

$cache = new cache(30);

$cache->cacheCheck();

echo date("Y-m-d H:i:s");

$cache->caching();

相关阅读:

一个PHP缓存类实例

一个PHP缓存类代码

一个简单的php缓存类分享

一个简单实用的PHP缓存类

一个简单至极的PHP缓存类代码

一个PHP并发访问实例代码

一个好用的PHP验证码类实例代码分享

php文件缓存类用法实例分析

一个完整的php文件上传类实例讲解

PHP采集类Snoopy抓取图片实例代码

一个PHP的ZIP压缩类分享

一个PHP针对数字的加密解密类

php缓存实例,一个PHP缓存类实例相关推荐

  1. java 类无法实例_Java无法从类实例访问类方法

    我已经定义了具有多种方法的A类.然后我有另一个类,即JSF的托管bean.在bean中我创建了一个A类实例,但后来我无法调用A类中的任何方法.所有字段都是公共的,方法范围也是公共的. 我认为这可能是因 ...

  2. python类实例覆盖_避免类实例覆盖默认值

    我正在处理初始化类的问题.下面是一个复制的例子,突出了潜在的问题(我没有设法使它小得多): 课程 我们有两个类A,B.等级制度A:第一类实例有两个属性link;name ^{cd2>的一个属性是 ...

  3. NodeJS C++ Addons之C++类实例包装与异步操作

    本文是对NodeJS C++ Addons原生写法的进一步探索,介绍了利用原生的Node和V8提供的API实现类包装和异步调用的具体做法.在阅读本文之前,如果对NodeJS C++ Addons的基础 ...

  4. Python缓存类实例

    本篇文章的内容主要包含 利用Python弱引用存储字典缓存类的实例,让参数相同的实例不用重复生成 略过复杂的通用化代码编写,利用Python自带库来缓存实例和方法对象 在Python的许多库中都有缓存 ...

  5. 微信小程序开发数据缓存基础知识辨析以及运用实例

    微信小程序开发数据缓存基础知识辨析以及运用实例 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的 ...

  6. php ssd性能影响,SATA SSD有无缓存,是否影响速度性能实例

    原标题:SATA SSD有无缓存,是否影响速度性能实例 在前面一篇文章里我们通过为SATA SSD虚拟缓存的方法,证明了缓存对SATA SSD速度性能的影响不大. 一般消费级SSD的缓存都是采用的DD ...

  7. php文件缓存代码,php文件缓存实例代码

    php教程文件缓存实例代码 缓存在实际使用当中应用很广泛,可以减轻对服务器数据库教程的访问,提高运行速度.目前很多cms内容管理系统中频繁使用缓存机制来提高系统运行的效率 cache.php 代码如下 ...

  8. 构造方法与重载:定义一个网络用户类,信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入

    构造方法与重载:定义一个网络用户类,信息有用户 ID.用户密码. email 地址.在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 email地址是用 ...

  9. python传递类的实例_使用Python将变量从一个类实例传递到另一个类实例?

    我在将一个类实例中定义的变量传递到另一个类实例时遇到问题.我对使用类比较陌生,但据我所知,变量可以通过简单地定义为类实例的一部分(例如在下面的示例中)从一个实例传递到另一个实例.虽然我以前使用过这个模 ...

最新文章

  1. Oracle正则表达式匹配中文的问题
  2. Python正则表达式常用的15个符号整理
  3. Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决
  4. linux安装软件报错:有未能满足的依赖关系
  5. Fedora CentOS Red Hat中让vim支持语法高亮设置
  6. Java面向对象(2) —— 继承
  7. Form窗体的属性与值 1123
  8. User breakpoint called from code at 0x771064f4
  9. 嵌入式linux加载引导内核和根文件系统的方法
  10. matlab双峰模型,为什么用MATLAB画的高斯双峰曲线不能永双高斯函数拟合?
  11. 怎么锁定excel部分单元格不被修改
  12. CMake常用命令(一) cmake_minimum_required命令
  13. 计算机排名的985大学排名,最新985大学排名榜名单
  14. Linux mint 双硬盘,记一次装机——笔记本UEFI双硬盘(SSD+机械)双系统(Win10+Linux Mint)...
  15. 每天一个小技巧——网易邮箱配置阿里云企业邮箱配置信息设置
  16. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。
  17. C语言实现斐波那契数列的几种方法
  18. 不得不了解的 iOS 15.4 beta 新特性
  19. 3. PyCharm、PyQt5、PyQt5-tools的下载安装、基于PyCharm开发PyQt5
  20. NTP 网络时间协议

热门文章

  1. 针对新手的Java EE7和Maven项目–第5部分–使用Arquillian / Wildfly 8进行单元测试
  2. 设置Java EE 6开发环境
  3. 从CLI监视OpenJDK
  4. 职称计算机考试 数量,职称计算机考试WPS基础考点:自动求和
  5. delphi 停电文本数据丢失_概述DCS系统正确停电和上电的步骤
  6. Java文件下载/下载文件的案例
  7. jar/war/ear文件的区别
  8. IntelliJ IDEA 修改单行注释的格式
  9. Linux 系统下命令 unrar 的中文版使用说明
  10. FTP 两种传输模式 Binary 和 ASCII 的区别