一个不错的PHP文件页面缓存类

在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。

页面缓存类







 代码如下 复制代码

<?php    
/*    
*
缓存类    cache   
* 作   
者:多菜鸟   
* 实   
例:   
*/   
/*include( "cache.php"
);   
    
$cache = new
cache(30);   
$cache->cacheCheck();   
    
echo
date("Y-m-d
H:i:s");   
    
$cache->caching(); 
*/

class cache {    
 
//缓存目录    
  var
$cacheRoot        =
"./cache/";    
 
//缓存更新时间秒数,0为不缓存    
  var
$cacheLimitTime   = 3; 
 
//缓存文件名    
  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();    
     
//echo
$cacheContent;    
     
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 = "";   
    foreachexplode( "/", $dir ) as $val )
{   
      $mdir .=
$val."/";   
      if( $val ==
".." || $val == "." || trim( $val ) == "" )
continue;    
          
     
if( ! file_exists( $mdir ) )
{    
       
if([email protected]( $mdir, $mode
)){    
        
return
false;    
       
}    
     
}    
   
}    
    return
true;    
 
}    
}    
?>

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

后来给大家介绍一个Memcache缓存了,算是内存缓存了

代码







 代码如下 复制代码

<?php
$memcache = new
Memcache;
$memcache->connect(‘localhost‘, 11211) or die ("Could not
connect");
$version = $memcache->getVersion();
echo "Server‘s
version: ".$version."n";
$tmp_object = new
stdClass;
$tmp_object->str_attr =
‘test‘;
$tmp_object->int_attr = 123;
$memcache->set(‘key‘,
$tmp_object, false, 10) or die ("Failed to save data at the
server");
echo "Store data in the cache (data will expire in 10
seconds)n";
$get_result = $memcache->get(‘key‘);
echo "Data from
the cache:n";
var_dump($get_result);
?>

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

大家在累了的时候,就去看看邪恶GIF动态图吧,内涵而不色情,愉悦身心!www.530312.net

一个不错的PHP文件页面缓存类,布布扣,bubuko.com

时间: 2024-10-18 15:48:05

一个不错的PHP文件页面缓存类的相关文章

一个不错输出日志文件代码

#include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef WIN32     #include <windows.h>     #include <io.h> #else     #include <unistd.h>     #include <sys/time.h>     #include <pthread.h>     #defi

C#读取XML文件的基类实现

刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node.Attribute(name)方法,因此,想到结合之前所做的XML操作,完成了一个能够读取XML文件的基类,便于以后的使用. PS:即使再老套的代码,目前也不敢进行优化,一是水平不行,二是不敢. 使用静态扩展类,扩展了几个经常使用的类型,能够方便数据的读写. 操作XML的类,可以直接继承BaseL

什么是页面缓存?

  网站建设中的页面缓存是安装在网站服务器之前的缓存 服务器,用于卸载对于服务器上的静态和动态对象的请求.在网站建设或网站制作中页面缓存还有其它常见名称,如反向代理缓存,反向代理.经过慎重考虑,最后 还是采用了页面缓存这个术语,因为在建站系统中代理程序还会负责负载平衡或SSL加速,而我们只想专注于缓存服务器对可扩展性的影响. 页面缓存,主要缓存什么东西呢? 我们首先要明确一下Content-Type的概念. 我们知道HTTP协议是类似MIME的消息结构,MIME类型是和文档的后缀名相关的,我们在

YII框架——页面缓存

首先,要知道页面缓存是在什么时候使用的.一般是在所有操作之前缓存文件. yii中有个behaviors()方法,在控制器的所有方法之前执行.所以一般在这个方法中缓存页面. public function behaviors() { return[ [ 'class'=>'yii\filters\PageCache', 'duration'=>1000, 'dependency'=>[ 'class'=>'yii\caching\FileDependency', 'fileName'

比较全面的一个PHP缓存类解析

转自:http://www.blhere.com/1164.html 一.引论 PHP,一门最近几年兴起的web设计脚本语言,由于它的强大和可伸缩性,近几年来得到长足的发展,php相比传统的asp网站,在速度上有绝对的优势,想mssql转6万条数据php如需要40秒,asp不下2分钟.但是,由于网站的数据越来越多,我们渴求能更快速的调用数据,不必要每次都从数据库掉,我们可以从其他的地方,比方一个文件,或者某个内存地址,这就是php的缓存技术,也就是Cache技术. 二.分析深入 一般来说,缓存的

web项目使用ehcache-web进行页面缓存或者文件压缩

一:  小试 EhCache web 用来缓存JSP页面 0) 涉及到的jar包 ehcache-core-2.5.2.jar, ehcache-web-2.0.4.jar 1) web.xml 这里使用了个简单的过滤器来拦截所有的jsp请求 <web-app <filter> <filter-name>PageCacheFilter</filter-name><filter-class>net.sf.ehcache.constructs.web.fi

PHP文件上传类(页面和调用部分)

<!--upform.html内容--> <form action="upload.php" method="post" enctype="multipart/form-data" > name: <input type="text" name="username" value="" /><br> <input type="

JAVA之File类-删除一个有内容的文件夹

package ioTest.io3; /* * 删除有内容的文件夹:从最里面一直向外删除.建议千万不要删除硬盘上面有用的文件夹哦 * 方法思路 * 循环+递归 */ import java.io.File; public class RemoveDir { public static void main(String[] args) { // TODO Auto-generated method stub File file=new File("F:\\removeDirTest")

自己实现的一个 .net 缓存类(原创)

public class CacheContainer { private static Hashtable ht = new Hashtable(); /// <summary> /// objId :缓存id,objObject:缓存对象,expires:绝对过期时间 /// </summary> /// <param name="objId"></param> /// <param name="objObject&q