程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 緩存PHP頁面的代碼,可以減輕CPU和MYSQL負擔

緩存PHP頁面的代碼,可以減輕CPU和MYSQL負擔

編輯:關於MYSQL數據庫
使用前,先在根目錄創建“cache”文件夾,然後運行1.PHP,第一次運行和第二次運行速度差異很大。
歡迎熟悉PHP的朋友使用和提意見。使用方法:(請保存為1.PHP)

<?
include('arrcache.PHP');
$cache = new ArrCache('cache',5,'txt');for ($i=0;$i<5;$i++)
{
  echo $i;
  sleep(1);
}
$cache->endCache();
?>

源代碼:(請保存為'arrcache.PHP')

<?/*
* 名稱: 極光緩存
*
* 作者: DCD
* mail: [email protected]
*
* web開發群: 3574636
*
*
* 完成日期: 2006-2-27
*
* 版本:V1.00
*
* 說明:
*
* 緩存網頁內容,減輕服務器CPU負荷,使用簡便、靈活。
* 本程序主要對MySQL的select操作進行優化,還有部分小偷類程序。
* 比如在百度搜索一個不常見的關鍵字,第一次搜索速度非常慢,“找到相關網頁181篇,用時0.426秒”
* 那麼再搜索一次,就會變成“找到相關網頁181篇,用時0.001秒”。
* 本程序就是使用了類似的方法緩存數據到服務器硬盤,減輕CPU和數據庫負荷。
* 請根據您頁面日訪問量來設定緩存時間。
* 使用前,一定先創建好緩存目錄。
*
* 注意:
*
* 不是所有頁面都需要使用本程序。
* 緩存文件會占用一定硬盤空間。
* 例如需要對數據庫進行inster、delete、update操作的頁面不要使用,select可以。
* mail()、fwrite()等函數,將不產生任何作用。
* 請不要將緩存時間設置得太小(小於5秒),那樣不會減輕負荷
* 如果你的頁面訪問量不太高,也不要使用本代碼。
*
* 使用方法:
*
* include('arrcache.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['URL'].'?'.$_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
?>

補充另一網友代碼:

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;
  }
for ($i=0;$i<5;$i++)
{
  echo $i;
  sleep(1);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved