smarty模板基礎----緩存數據

緩存數據,這個並非暫存的緩存,而是寫入了內存的緩存php

經過一個例子來書寫:緩存數據html

1、書寫php和html頁面的基本功能前端

既然是用smarty模板,那麼前端和後端要分開寫了sql

(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 >

看下效果post

 

2、就是編寫「緩存」功能spa

進行寫入緩存的時候不是寫入的上面的php頁面,而是這個頁面的源代碼3d

(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文件

 

3、緩存的有效時間

緩存要是一直都在的話,那麼後臺怎麼改,前面也不會進行修改,那麼就要盡心緩存的有效時間

代碼以下:

1
2
$time  = 10;   //緩存有效期10秒
if ( file_exists ( $filename ) && (( filemtime ( $filename )+ $time )>= time()) )   //這是對緩存文件的判斷

當緩存文件有了而且10秒以後就會從新又沒有緩存文件時候的輸出####  

 

4、進行分頁的緩存

首先是分頁的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秒後失效

這是第二個頁面,剛開始沒有緩存文件,因此會有####

隨便點一頁,回來後就是有了緩存文件,因此沒有了###

後面的也是同樣的~~~

相關文章
相關標籤/搜索