以文件形式緩存php變量的方法
本文實(shí)例講述了以文件形式緩存php變量的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
<?php
/*
$cache_set = array(
//緩存路徑 , 最后要加"/"
'cacheRoot'=>'./cache/',
//緩存時(shí)間
'cacheTime'=>20,
//cache type
'cacheType'=>1,
//擴(kuò)展名
'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;
*/
/**
* 數(shù)據(jù)緩存類 v1.0
* @author shooke
* 2009-11-13 16:02:26
* 用于緩存數(shù)據(jù),如變量,但不能緩存頁(yè)面
*/
class Cache{
//配置
public $config = array(
//緩存路徑
'cacheRoot'=>'./cache/',
//緩存時(shí)間
'cacheTime'=>1,
//cache 類型 1串化數(shù)據(jù) 2變量
'cacheType'=>2,
//擴(kuò)展名
'cacheExe'=>'.php'
//轉(zhuǎn)換中間變量
);
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;
}
}
//循環(huán)刪除路徑
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 ) ) {
//如果緩存時(shí)間為負(fù)數(shù)則永不過期
if ($this->config['cacheTime'] < 0) {
return true;
}
//如果緩存時(shí)間為0則一直過期
if ($this->config['cacheTime'] == 0) {
return false;
}
//獲取緩存文件的建立時(shí)間
$ctime = intval(filemtime( $fileName ));
//比較是否大于緩存時(shí)間,是則過期 否則不過期
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也就是不啟用緩存是直接返回?cái)?shù)據(jù)
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;
}
}
//循環(huán)創(chuàng)建目錄
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;
}
}
?>
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP實(shí)現(xiàn)識(shí)別復(fù)雜pdf文檔的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用PHP實(shí)現(xiàn)識(shí)別復(fù)雜pdf文檔的功能,文中的示例代碼講解詳細(xì),感興趣的徐海波可以跟隨小編一起學(xué)習(xí)一下2024-01-01
PHP遞歸遍歷多維數(shù)組實(shí)現(xiàn)無限分類的方法
這篇文章主要介紹了PHP遞歸遍歷多維數(shù)組實(shí)現(xiàn)無限分類的方法,涉及PHP遞歸操作遍歷數(shù)組的相關(guān)技巧,在聯(lián)動(dòng)菜單及父子欄目設(shè)計(jì)等方面非常具有實(shí)用價(jià)值,需要的朋友可以參考下2016-05-05
PHP封裝的mysqli數(shù)據(jù)庫(kù)操作類示例
這篇文章主要介紹了PHP封裝的mysqli數(shù)據(jù)庫(kù)操作類,涉及php針對(duì)mysqli數(shù)據(jù)庫(kù)的連接、增刪改查、分頁(yè)、排序等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
詳解WordPress中用于合成數(shù)組的wp_parse_args()函數(shù)
這篇文章主要介紹了WordPress中用于合成數(shù)組的wp_parse_args()函數(shù),轉(zhuǎn)換成數(shù)組通常是為了方便查詢,需要的朋友可以參考下2015-12-12
關(guān)于php 接口問題(php接口主要也就是運(yùn)用curl,curl函數(shù))
本篇文章是對(duì)php中的接口問題(php接口主要也就是運(yùn)用curl,curl函數(shù))進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
PHP實(shí)現(xiàn)的隨機(jī)IP函數(shù)【國(guó)內(nèi)IP段】
這篇文章主要介紹了PHP實(shí)現(xiàn)的隨機(jī)IP函數(shù),可實(shí)現(xiàn)輸出國(guó)內(nèi)IP段的功能,涉及php字符串與數(shù)組的計(jì)算操作相關(guān)技巧,需要的朋友可以參考下2016-07-07

