緩存數據,這個並非暫存的緩存,而是寫入了內存的緩存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秒後失效
這是第二個頁面,剛開始沒有緩存文件,因此會有####
隨便點一頁,回來後就是有了緩存文件,因此沒有了###
後面的也是同樣的~~~