緩存數據,這個并不是暫存的緩存,而是寫入了內存的緩存
通過一個例子來書寫:緩存數據
一、書寫php和html頁面的基本功能
既然是用smarty模板,那么前端和后端要分開寫了
(1)php頁面
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php $filename = "../cache/huancun.html" ; //這個是放緩存的頁面(緩存的不是代碼,而是頁面的源信息) include ( "../init.inc.php" ); //引入入口文件 include ( "../DBDA.php" ); //引入數據庫,要用到數據庫的內容 $db = new DBDA(); //造新對象 $sql = "select * from chinastates" ; //這是查找Chinastates表中的信息 $attr = $db ->Query( $sql ); //執行這個語句 $smarty ->assign( "shuzu" , $attr ); //注冊變量信息 $smarty ->display( "huancun.html" ); //顯示模板 |
(2)html頁面
可以用表來顯示數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< h1 >數據列表</ h1 > < table width="50%" border="1" cellpadding="0" cellspacing="0"> < tr > < td >代號</ td > < td >名稱</ td > < td >操作</ td > </ tr > <{foreach $shuzu as $v}> <!--遍歷顯示這個表中的相應信息--> < tr > < td ><{$v[0]}></ td > < td ><{$v[1]}></ td > < td >操作</ td > </ tr > <{/foreach}> </ table > |
看下效果
二、就是編寫“緩存”功能
進行寫入緩存的時候不是寫入的上面的php頁面,而是這個頁面的源代碼
(1)這個cache文件中要判斷這個huancun.html文件存不存在,存在怎么樣?不存在怎么樣?
結果就是:如果緩存文件存在:直接調用緩存;如果緩存文件不存在:重新緩存。
A.如果這個文件存在(判斷文件存不存在用的是:file_exists()方法)語句:
1
2
3
4
5
|
if(file_exists($filename)) { //直接調用緩存 include($filename); } |
B.否則(文件不存在)
重要的是要在上面讀取數據庫的內容加上這幾項:
1.開啟內存緩存;
2.關閉內存緩存;
它們是成對的!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
else { //重新緩存 ob_start(); //開啟內存緩存 include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); $sql = "select * from chinastates" ; $attr = $db ->Query( $sql ); $smarty ->assign( "shuzu" , $attr ); $smarty ->display( "huancun.html" ); $str = ob_get_contents(); //獲取內存中的緩存內容 file_put_contents ( $filename , $str ); //將字符串中的內容放入$filename的文件中 ob_flush(); //關閉內存緩存 echo "#######################################" ; //這個是為了區別哪個是剛出來的緩存文件 } |
看下效果如下圖,因為cache文件夾中沒有hunacun.html才會走上面的“否則”語句,輸出一長串的######
再刷新一下就沒有了,因為cache文件夾中已經有了huancun.html文件
三、緩存的有效時間
緩存要是一直都在的話,那么后臺怎么改,前面也不會進行修改,那么就要盡心緩存的有效時間
代碼如下:
1
2
|
$time = 10; //緩存有效期10秒 if ( file_exists ( $filename ) && (( filemtime ( $filename )+ $time )>= time()) ) //這是對緩存文件的判斷 |
當緩存文件有了并且10秒之后就會重新又沒有緩存文件時候的輸出####
四、進行分頁的緩存
首先是分頁的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
|
<?php $p = 1; if (! empty ( $_GET [ "page" ])) { $p = $_GET [ "page" ]; } $filename = "../cache/huancun{$p}.html" ; //緩存文件存放的位置 $time = 10; //緩存有效期10秒 if ( file_exists ( $filename ) && (( filemtime ( $filename )+ $time )>= time()) ) { //直接調用緩存 include ( $filename ); } else { //重新緩存 ob_start(); //開啟內存緩存 include ( "../init.inc.php" ); include ( "../DBDA.php" ); $db = new DBDA(); $sqll = "select count(*) from chinastates" ; $zts = $db ->StrQuery( $sqll ); //總條數的執行語句 include ( "../page.class.php" ); $page = new Page( $zts ,10); //分頁顯示的條數 $sql = "select * from chinastates " . $page ->limit; //分頁的$page->limit $attr = $db ->Query( $sql ); $smarty ->assign( "fpage" , $page ->fpage()); //分頁信息的顯示 $smarty ->assign( "shuzu" , $attr ); $smarty ->display( "huancun.html" ); $str = ob_get_contents(); //獲取內存中的緩存內容 file_put_contents ( $filename , $str ); //將$str的內容寫入$filename的文件中 ob_flush(); //關閉內存緩存 echo "#######################################" ; } |
結果就是入下,每一個頁面都會從緩存開始有,10秒后失效
這是第二個頁面,剛開始沒有緩存文件,所以會有####
隨便點一頁,回來后就是有了緩存文件,所以沒有了###
后面的也是一樣的~~~
文章列表