程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中文件緩存實現程序代碼

php中文件緩存實現程序代碼

編輯:關於PHP編程

文件緩存就是指把緩存生成一個文件,這個文件可以是php,txt等等文件,當我下載訪問時就來判斷訪問上次生成時間,如果超過了我們指定的時間再重新生成一次,否則就直接調用緩存文件,這樣就可以減少了對mysql數據庫的查詢了。

文件緩存原理

1.把需要緩存的數據通過serialize函數序列化後直接保存到文件。在需要使用緩存數據的時候,通過反序列化讀入文件內容並復制給需要的變量,然後使用。不經常改動的數據可以寫入緩存文件。


文件緩存實例

index.php

 代碼如下 復制代碼

define('CACHE_ROOT','./');
 include_once('./cache.func.php');
 $file = 'qzp';
 $cacheFile = getCacheFileByID($file,'info/');
 
 print_R(readCache($cacheFile));
 
 $info = array(
      'username'=>'qzp',
      'area_name'=>'admin',
      'mp_name'=>'1234',
      'gh_name'=>'5678');
writeCache($cacheFile,$info);

cache.func.php文件

 function arrayeval($array, $level = 0) {
    $space = '';
    for($i = 0; $i <= $level; $i++) {
        $space .= "t";
    }
    $evaluate = "Arrayn$space(n";
    $comma = $space;
    foreach($array as $key => $val) {
        $key = is_string($key) ? '''.addcslashes($key, ''').''' : $key;
        $val = !is_array($val) && (!preg_match("/^-?[1-9]d*$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''').''' : $val;
        if(is_array($val)) {
            $evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
        } else {
            $evaluate .= "$comma$key => $val";
        }
        $comma = ",n$space";
    }
    $evaluate .= "n$space)";
    return $evaluate;
}
 
function getCacheFileByID($id,$pre='info/',$md5=true){
 if($md5){
  $md5id = md5($id);
  return CACHE_ROOT.'/'.$pre.substr($md5id,0,2).'/'.substr($md5id,2,2).'/'.$id;
 }else{
  return CACHE_ROOT.'/'.$pre.$id;
 }
}
 
function readCache($filename,$time=0){
 if($datas = @file_get_contents($filename)){
  $datas = unserialize($datas);
  if($time < 1 || (time() - $datas['time'] < $time)){
   return $datas['data'];
  }
 }
 return false;
}
 
function writeCache($filename,$data){
 makeDir(dirname($filename));
 if($handle = fopen($filename,'w+')){
  $datas = array('data'=>$data,'time'=>time());
  flock($handle,LOCK_EX);
  $rs = fputs($handle,serialize($datas));
  flock($handle,LOCK_UN);
  fclose($handle);
  if($rs!==false){
   return true;
  }
 }
 return false;
}
 
function makeDir($path)
{
 if (! file_exists ( $path )) {
  makeDir ( dirname ( $path ) );
  if (! mkdir ( $path, 0777 ))
  die ( '無法創建文件夾' . $path );
 }
}

把要緩存的文件序列化下存放起來,當使用的時候反序列化回來使用。

使用對PHP模板數據進行緩存的工具smarty。smarty將HTML文件緩存成一個靜態的HTML頁,需要緩存的模板文件可以使用smarty。
例:

 代碼如下 復制代碼

<?php
//包含Smarty類庫
require('libs/Smarty.class.php');
 
//創建Smarty類的對象
$smarty = new Smarty;
 
//啟用緩存
$smarty->caching = true;
 
//指定緩存文件保存的目錄
$smarty->cache_dir = "./cache/";
 
//也會把輸出保存
$smarty->display('index.tpl')
?>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved