詳細(xì)講解PHP中緩存技術(shù)的應(yīng)用_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:利用PHP V5開發(fā)多任務(wù)應(yīng)用程序
      許多 PHP 開發(fā)人員認(rèn)為,由于標(biāo)準(zhǔn)的 PHP 缺少線程功能,因此實際 PHP 應(yīng)用程序不可能執(zhí)行多任務(wù)處理。例如,如果應(yīng)用程序需要其他 Web 站點的信息,那么在遠(yuǎn)程檢索完成之前它都必須停止。這是錯

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

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

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

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

      <?php
      classcache{
      /*
      ClassName:cache
      Description:controltocachedata,$cache_out_timeisaarraytosavecachedatetimeout.
      Version:1.0
      Author:老農(nóng)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('緩存文件不存在而且不能創(chuàng)建,需要手動創(chuàng)建.');
      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'>發(fā)生錯誤:<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)){//寫入字節(jié)流,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;
      }

      }
      ?>

      分享:詳細(xì)解析 PHP 向 MySQL 發(fā)送數(shù)據(jù)過程
      下面的一段代碼是一個很簡單的 HTML 表單: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir

      共4頁上一頁1234下一頁
      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關(guān)PHP教程