2008年2月1日 星期五

[PHP]暫存網頁內容,減輕服務器CPU負荷。

若是有使用AJAX 的頁面恐怕不支援...

<?
include('cache.php');//引入檔案
$cache = new ArrCache('cache',5,'txt');//在檔案前頭放入這各...

?>
html ...
body ...

/body...
/html...
<?
$cache->endCache();//最後面放入這各...

?>

下列檔案存成cache.php
<?
/*
*
* 暫存網頁內容,減輕服務器CPU負荷,使用簡便、靈活。
* 本程序主要對MYSQL的select操作進行優化,還有部分小偷類程序。
* 比如搜索一個不常見的關鍵字,第一次搜索速度非常慢,「找到相關網頁181篇,用時0.426秒」
* 那麼再搜索一次,就會變成「找到相關網頁181篇,用時0.001秒」。
* 本程序就是使用了類似的方法暫存數據到服務器硬盤,減輕CPU和數據庫負荷。
* 請根據您頁面日訪問量來設定暫存時間。
* 使用前,一定先創建好暫存目錄。
*
* 注意:
*
* 不是所有頁面都需要使用本程序。
* 暫存文件會佔用一定硬盤空間。
* 例如需要對數據庫進行inster、delete、update操作的頁面不要使用,select可以。
* mail()、fwrite()等函數,將不產生任何作用。
* 請不要將暫存時間設置得太小(小於5秒),那樣不會減輕負荷
* 如果你的頁面訪問量不太高,也不要使用本代碼。
*
* 使用方法:
*
* include('cache.php');//必須在文件最開始處包含本頁
* $cache = new ArrCache('cache');//設置暫存文件夾
* ……
* ……
* ……//代碼
* $cache->endCache();//在文件最後寫入
*
* 說明:
*
* class ArrCache(string path,[int time],[string type]);
* path: cache文件保存目錄,從根目錄算起,首尾不需要「/」
* time: 暫存時間,默認120秒
* type: 暫存文件後綴,默認「txt」
*
* void endCache();
* 在頁面最後寫上,否則這行後邊的數據不會被暫存。
*
*/
ob_start();
class ArrCache
{

//構造函數
function ArrCache($path,$time = 120,$type = 'txt')
{
$this->path = $path;
$this->time = $time;
$this->fileType = $type;
$this->fileName = $_SERVER['DOCUMENT_ROOT'].'\\'.$this->path.'\\'.md5($_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']).'.'.$this->fileType;
if (file_exists($this->fileName) && ((filemtime($this->fileName)+$this->time) > time()))
{
$fp = fopen($this->fileName,"r");
echo fread($fp,filesize($this->fileName));
fclose($fp);
ob_end_flush();
exit;
}
}

//在文件最後加入這行,輸出所有暫存內容,並且寫入暫存文件。
function endCache()
{
$fp = fopen($this->fileName,"w");
fwrite($fp,ob_get_contents());
fclose($fp);
ob_end_flush();
}

}//end class
?>

【下列文章您可能也有興趣】

沒有留言: