国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

詳細講解PHP中緩存技術的應用

2024-05-04 21:51:46
字體:
來源:轉載
供稿:網友

PHP,一門最近幾年興起的web設計腳本語言,由于它的強大和可伸縮性,近幾年來得到長足的發展,php相比傳統的asp網站,在速度上有絕對的優勢,想mssql轉6萬條數據php如需要40秒,asp不下2分鐘.但是,由于網站的數據越來越多,我們渴求能更快速的調用數據,不必要每次都從數據庫掉,我們可以從其他的地方,比方一個文件,或者某個內存地址,這就是php的緩存技術,也就是Cache技術.

一般來說,緩存的目的是把數據放在一個地方讓訪問的更快點,毫無疑問,內存是最快的,但是,幾百M的數據能往內存放么?這不現實,當然,有的時候臨時放如服務器緩存,如ob_start()這個緩存頁面開啟的話在發送文件頭之前頁面內容都被緩存在內存中,知道等頁面輸出自動清楚或者等待ob_get_contents的返回,[或者被ob_end_clean顯示的清除,這在靜態頁面的生成中能很好的利用,在模板中能得到很好的體現,我的這篇文章深入的討論了:

談PHP生成靜態頁面,這是一種方式,但這是臨時性的,不是解決我們問題的好方法.

另外,在asp中有一對象application,可以保存公用的參數,這也算點緩存,但在php,我至今沒看到開發者產出這種對象,的確,沒必要.asp.net的頁面緩存技術就用的是viewstate,而cache就是文件關聯,(不一定準確),文件被修改,更新緩存,文件沒被修改而且不超時(注釋1),就讀取緩存,返回結果,就是這個思路,看看這個源碼:

<?php
classcache{
/*
ClassName:cache
Description:controltocachedata,$cache_out_timeisaarraytosavecachedatetimeout.
Version:1.0
Author:老農cjjer
Lastmodify:2006-2-26
AuthorURL:http://www.cjjer.com
*/
private$cache_dir;
private$expireTime=180;//緩存的時間是60秒
function__construct($cache_dirname){
if(!@is_dir($cache_dirname)){
if(!@mkdir($cache_dirname,0777)){
$this->warn('緩存文件不存在而且不能創建,需要手動創建.');
returnfalse;
}
}
$this->cache_dir=$cache_dirname;
}
function__destruct(){
echo'Cacheclassbye.';
}
functionget_url(){
if(!isset($_SERVER['REQUEST_URI'])){
$url=$_SERVER['REQUEST_URI'];
}else{
$url=$_SERVER['SCRIPT_NAME'];
$url.=(!empty($_SERVER['QUERY_STRING']))?'?'.$_SERVER['QUERY_STRING']:'';
}
return$url;
}
functionwarn($errorstring){
echo"<b><fontcolor='red'>發生錯誤:<pre>".$errorstring."</pre></font></b>";
}
functioncache_page($pageurl,$pagedata){
if(!$fso=fopen($pageurl,'w')){
$this->warns('無法打開緩存文件.');//trigger_error
returnfalse;
}
if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型鎖定
$this->warns('無法鎖定緩存文件.');//trigger_error
returnfalse;
}
if(!fwrite($fso,$pagedata)){//寫入字節流,serialize寫入其他格式
$this->warns('無法寫入緩存文件.');//trigger_error
returnfalse;
}
flock($fso,LOCK_UN);//釋放鎖定
fclose($fso);
returntrue;
}
functiondisplay_cache($cacheFile){
if(!file_exists($cacheFile)){
$this->warn('無法讀取緩存文件.');//trigger_error
returnfalse;
}
echo'讀取緩存文件:'.$cacheFile;
//returnunserialize(file_get_contents($cacheFile));
$fso=fopen($cacheFile,'r');
$data=fread($fso,filesize($cacheFile));
fclose($fso);
return$data;
}
functionreadData($cacheFile='default_cache.txt'){
$cacheFile=$this->cache_dir."/".$cacheFile;
if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){
$data=$this->display_cache($cacheFile);
}else{
$data="fromherewocangetitfrommysqldatabase,updatetimeis<b>".date('ldSofFYh:i:sA')."</b>,過期時間是:".date('ldSofFYh:i:sA',time() $this->expireTime)."----------";
$this->cache_page($cacheFile,$data);
}
return$data;
}

}
?>

共4頁上一頁1234下一頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠来县| 广昌县| 封开县| 西充县| 屏山县| 桦南县| 霍林郭勒市| 南郑县| 巴林左旗| 叶城县| 隆尧县| 通榆县| 无棣县| 灵台县| 北流市| 通州市| 沧源| 承德市| 弥渡县| 延津县| 涞水县| 三河市| 柳河县| 中牟县| 久治县| 黑龙江省| 犍为县| 兴化市| 襄垣县| 尼木县| 宾阳县| 浠水县| 文水县| 渭南市| 临汾市| 高碑店市| 长葛市| 龙海市| 秭归县| 修文县| 嘉峪关市|