php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考。
页面缓存类
代码如下 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
<?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缓存,算是内存缓存。
代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?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缓存有所帮助。