PHP文件缓存类实现代码

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

<?php
/*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 = "";
  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;
 }
}
?>

上面使用算是页面缓存了,每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)
给大家介绍一个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是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

以上就是本文的全部内容,希望对大家学习php缓存有所帮助。

(0)

相关推荐

  • php限制文件下载速度的代码

    有时候你会出于某种目的而要求把下载文件的速度放慢一些,例如你想实现文件下载进度条功能.限制下载速度最大的好处是节省带宽,避免瞬时流量过大而造成网络堵塞.本文将和你分享如何通过php代码来实现限制文件的下载速度. 首先来看看利用php限制文件下载速度的代码: <?php // 将发送到客户端的本地文件 $local_file='abc.zip'; // 文件名 $download_file='your-download-name.zip'; // 设置下载速率(=> 31.2 kb/s) $do

  • php视频拍照上传头像功能实现代码分享

    如果要在php中实现视频拍照我们需要借助于flash插件了,由flash拍出的确照片我们再通过php的$GLOBALS ['HTTP_RAW_POST_DATA']接受数据,然后保存成图片就可以了,下面我来介绍一下. 使用的是$GLOBALS ['HTTP_RAW_POST_DATA'],这个系统函数跟post很相似,但是$GLOBALS ['HTTP_RAW_POST_DATA']支持的数据格式更丰富些. 设计流程: $GLOBALS ['HTTP_RAW_POST_DATA']传递照片数据流

  • Thinkphp无限级分类代码

    本篇就一点一点教大家写一个无限级分类出来,其实掌握一个知识,最主要的是要掌握无限级分类的逻辑,那么写起来就很容易的多了. 首先看数据库表:xp_cate 控制器:CateAction.class.php <?php class CateAction extends Action{ function index(){ $cate=M('Cate'); $list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath&qu

  • jQuery+Ajax+PHP“喜欢”评级功能实现代码

    本文章来给大家介绍一个jQuery+Ajax+PHP实现"喜欢"评级功能代码,用户点击页面中自己喜欢的图片上的红心按钮时,前端页面向后台发送一个ajax请求,后台PHP程序接收请求后,查询IP库中是否已经有该用户的点击记录,如果没有,则将对应的数值+1,同时将该用户IP信息写入IP库,反之则告诉用户已经"喜欢过了". 数据库设计 先准备两张表,pic表保存的是图片信息,包括图片对应的名称.路径以及图片"喜欢"总数,pic_ip则记录用户点击喜欢后

  • php抓取并保存网站图片的实现代码

    此程序实现了网页源代码捕获,图片链接获取.分析.并将同样的图片链接合并功能,实现了图片抓取功能.利用php强大的网络内容处理函数将指定的网站上的所有图片抓取下来,保存在当前目录下,以下为代码: <?php /*完成网页内容捕获功能*/ function get_img_url($site_name){ $site_fd = fopen($site_name, "r"); $site_content = ""; while (!feof($site_fd)) {

  • 分享10段PHP常用代码

    本文汇集PHP开发中经常用到的十段代码,包括Email.64位编码和解码.解压缩.64位编码.解析JSON等,希望对您有所帮助. 1.使用PHP Mail函数发送Email $to = "viralpatel.net@gmail.com"; $subject = "VIRALPATEL.net"; $body = "Body of your message here you can use HTML too. e.g. ﹤br﹥ ﹤b﹥ Bold ﹤/b﹥

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

    网上关于 PHP 缓存类的资料很多,不过这个类应该是我见过功能满足需求,但又无比简洁的一个.废话不多说,直接看代码吧! 使用说明: 1.实例化 $cache = new Cache(); 2.设置缓存时间和缓存目录 $cache = new Cache(60, '/any_other_path/'); 第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置. 默认情况下,缓存时间是 3600 秒,缓存目录是 cache/ 3.读取缓存 $value = $cache->get('data_ke

  • 2款PHP无限级分类实例代码

    本文章总结了两款PHP无限级分类实现程序代码,有需要学习的朋友可参考一下. 主要思路:首先看第三行和第四行,父类ID(PARENTID)的值是1,表示属于id=1这个类的子类,而,一,二两行因为是一级分类,没有上级分类,所以父类ID(PARENTID)的值是0,表示初级分类,依次类推便实现了无限级分类.最终的效果是: ├一级分类A ├─┴二级分类A ├─┴二级分类B ├一级分类B 然后就是程序,这里以PHP作为描述语言,可以很方便的改成其他语言,因为原理相似,就是一个递归而已. <?php $d

  • PHP代码判断设备是手机还是平板电脑(两种方法)

    现在移动互联网越来越发达,很多的网站都普及了手机端浏览,为了更好的让网页在手机端显示,我们都选择了使用CSS媒体查询制作响应式模版,但这也有弊端,例如某些网站的结构是CMS类型的,太多的内容要显示,而使用CSS媒体查询设计响应式,只会隐藏但还是加载了,为了让手机端更快速的显示出内容,我们可以使用这个PHP判断手机设备代码,使用这个代码可以很方便的显示或不显示自定义的内容. 在做WEB开发的时候经常会需要用到对移动设备的页面匹配,当然可以直接把网站做成响应式的,但如果不想这么做的话,可以使用PHP

  • PHP防止刷新重复提交页面的示例代码

    PHP防止刷新重复提交页面的示例代码 作为phper,我们在开发和学习php过程中,难免要经常的接受处理表单数据,然而处理表单的时候总会有一个问题,困扰大家,刷新页面重复提交的问题.如何防止刷新页面重复提交呢? PHP防止刷新重复提交,通过不断刷新(Refresh or Reload)表单提交页面,可以重复提交表单内容,可以利用 PHP 的 Session 来避免这一点,Session 保存在服务器端,在 PHP 过程中改变 Session 变量的值后,即保存在服务器端,下次访问这个变量时,得到

  • PHP抽奖算法程序代码分享

    抽奖算法需要满足的需求如下: 1.可以控制中奖的概率 2.具有随机性 3.最好可以控制奖品的数量 4.根据用户ID或者ip.手机号.QQ号等条件限制抽奖次数 初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序: 该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分: 代码如下 <?php /** * * * @lanfengye <zibin_5257@163.com> */ class Chouj

  • php防止网站被攻击的应急代码

    前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份.遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击.各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从ip地址上来解决这种攻击的问题. 如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下向不更好的解决方式,只是权宜之计,以后再进行深入的研究一下. 这个方法总结为一句话就是:通过禁止IP频繁访问防止网站被防攻击. <?php header('Content-type: te

  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段.分享给大家供大家参考,具体如下: 1.计算两个时间的相差几天 $startdate=strtotime("2009-12-09"); $enddate=strtotime("2009-12-05"); 上面的php时间日期函数strtotime已经把字符串日期变成了时间戳,这样只要让两数值相减,然后把秒变成天就可以了,比较的简单,如下: $days=round(($enddate-$startdate)/3600/24) ;

随机推荐