文章出處

緩存數據,這個并不是暫存的緩存,而是寫入了內存的緩存

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

一、書寫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秒后失效

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

隨便點一頁,回來后就是有了緩存文件,所以沒有了###

后面的也是一樣的~~~


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()