common.inc.php文件73-111行代碼分析

          <?
          { //如果緩存文件存在和緩存沒有過期效,那么就返回緩存文件名
          require $cachefile;
          exit;
          }
          }
          if($PHP_QUERYSTRING && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", $PHP_QUERYSTRING, $urlvar)) //獲取傳遞過來的變量。有什么用的呢?請看下面解釋
          {
          parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
          }
          }
          /**
          parse_str:本函數(shù)可將瀏覽器返回的 GET 方法的 QUERY_STRING 字符串解析。返回的變量名及值就依 QUERY_STRING 的名稱及值.
          上面這部分相對復(fù)雜了點(diǎn)。但沒關(guān)系。慢慢講解. 首先緩存只針對前臺.所以我們一開始就判斷.這個腳本是運(yùn)行在前臺的而不是在后臺 !defined('IN_ADMIN') 來判斷.
          然后呢.再看客戶配置 config.inc.php文件是否開啟了緩存. ==2 就是開啟了. .接著開始用一系列的規(guī)則來找出緩存的文件名和目錄: 以 腳本名:xx.php和后續(xù)傳遞的參數(shù) ?xx=ee&bb=jj 他兩的字符竄的MD5 .以這個md5竄來定義出了緩存目錄.和緩存文件 .接著再判斷這個緩存文件是否存在和是否沒過緩存有效期.如果沒有就返回這個緩存文件的名字.
          然后到主菜了. 最后一個if邏輯是做什么的呢? 不知道大家有沒見過 這樣的網(wǎng)址:http://www.beihai.com/dd.php/xx-23/cc-22.html  他們其實都算是偽靜態(tài).優(yōu)化URL用的.咋看起來還很象靜態(tài).爽. 但你可能想.這樣的地址.我們寫PHP程序的.怎么獲取get 變量呢?  最后if 就是解答這個問題的. 先剝離url來獲取  傳遞的字符竄.然后 str_replace 來把 '/' '-' 替換成標(biāo)準(zhǔn)的 '&' '=' 好象:  http://www.beihai.com/dd.php&xx=23&cc=22  看這樣你應(yīng)該看明白了吧.然后用 parse_str() 函數(shù)來把xx 變 $xx=23 cc 變 $cc=22 php真是什么都給你想到了.強(qiáng).看明白了吧.OK.過了.
           

          恩.終于把common.inc.php 這個文件大概講解完了. 這個文件里面包含了很多東西.都是些挺不錯的思想.大家應(yīng)該好好學(xué)習(xí).這樣我們寫出來的PHP程序會更加強(qiáng)壯.
          ,偶現(xiàn)在晚上都在邊陪老婆邊看電影邊弄linux 的C,還是學(xué)習(xí) 階段 所以時間有點(diǎn)緊.白天在公司擠點(diǎn)時間出來分析代碼羅.
           
          對于phpcms 我也是第一次接觸.以前沒裝過也沒用過.現(xiàn)在也沒詳細(xì)用過.所以我看到代碼講什么我就講什么.沒具體講PHPCMS的應(yīng)用等.希望理解.
           
          如果我分析代碼分析得不合理.請指出.功能進(jìn)步學(xué)習(xí).謝謝復(fù)制PHP內(nèi)容到剪貼板PHP代碼: */
          require PHPCMS_ROOT.'/include/'.$db_file.'.class.php'; // 包含數(shù)據(jù)庫操作類,下章詳說
          require PHPCMS_ROOT.'/include/tag.func.php';  //遇到再說
          require PHPCMS_ROOT.'/include/extension.inc.php'; //遇到再說
          $db = new $db_class;   // 實例化數(shù)據(jù)庫類
          $db->connect($CONFIG['dbhost'], $CONFIG['dbuser'], $CONFIG['dbpw'], $CONFIG['dbname'], $CONFIG['pconnect']); //連接數(shù)據(jù)庫@_@
          $db->iscache = $CONFIG['dbiscache']; //是否開啟SQL緩存
          $db->expires = $CONFIG['dbexpires']; //緩存時間
          if(!cache_read('table.php'))
          {
          require_once PHPCMS_ROOT.'/include/cache.func.php';
          cache_all(); //生成所有緩存
          }
          /**
          cache_read() 函數(shù) 讀緩存文件函數(shù)存在 global.func.php 里面.上菜先:
          function cache_read($file, $mode = 'i')
          {
          $cachefile = PHPCMS_CACHEDIR.$file;
          if(!file_exists($cachefile)) return array();
          return $mode == 'i' ? include $cachefile : file_get_contents($cachefile); //這一步是用來判斷是不是本站內(nèi)模塊,如果沒有傳入值的話就調(diào)用這個緩存,反之則得到他的內(nèi)容。
          }
          就這么簡單.文本緩存,在一些大的開源的PHP項目中經(jīng)常見到.主要是為了減輕數(shù)據(jù)庫的負(fù)荷的. 比如在程序啟動文件里面,就把一些后臺配置的常用信息緩存到php文件里面.然后在以后的程序就可以直接使用而不用每次都訪問數(shù)據(jù)庫了.但對經(jīng)常要更新的信息.最好不要用文本緩存這形式,因為PHP文件內(nèi)置的文件鎖flock()不是很好用.大系統(tǒng)中多用戶同時寫訪問的時候有可能會把緩存文件破壞.大系統(tǒng)建議使用 memcached  mysql5.1 分區(qū)  mysql 主從 來實現(xiàn)負(fù)載均衡 @=@ 廢話太多了. 這個函數(shù)很簡單.自己看下就明白了.如果緩存和模式變量 $mode 是否為 i 是就include 不是就 把文件以字符竄形式讀到內(nèi)存中.
          如果 cache_read()找不到緩存文件'table.php'就會返回false,那么就 加栽 cache.func.php  文件.它里面是些創(chuàng)建緩存的一些函數(shù). 然后呢執(zhí)行 cache_all()函數(shù)生成所有的常用信息緩存.
          關(guān)于phpcms 的緩存更詳細(xì)包括生成原理.打算在弄完啟動文件common.inc.php 后再開篇寫個詳細(xì)的.  
          */
          $CACHE = cache_read('common.php');
          /**
          加載 common.php 緩存文件里面的變量(數(shù)據(jù)) 這樣我們不用從數(shù)據(jù)庫讀了每次.是吧
          common.php 文件里面是什么來的呢?上菜:
          <?php
          return array (
          'module' =>
          array (
          'phpcms' =>
          array (
          'module' => 'phpcms',
          'name' => 'phpcms',
          'iscore' => '1',
          'iscopy' => '0',
          'isshare' => '0',
          'moduledir' => '',
          'linkurl' => '',
          ),
          'member' =>
          array (
          'module' => 'member',
          'name' => '會員',
          'iscore' => '1',
          'iscopy' => '0',
          'isshare' => '0',
          'moduledir' => 'member',
          'linkurl' => '/phpcms/member/',
          ),
          'article' =>
          array (
          'module' => 'article',
          'name' => '文章',
          'iscore' => '0',
          'iscopy' => '1',
          'isshare' => '0',
          'moduledir' => 'article',
          'linkurl' => '',
          )
          ?>
          看到了吧.這個就是全部從數(shù)據(jù)庫里面生成的文本緩存信息.我們不用每次都連接數(shù)據(jù)庫讀數(shù)據(jù)庫.而只要訪問里面的數(shù)組就可以得到一些配置信息.
          這個就是文本緩存的作用了,至于怎么會生成這個文本緩存文件的.我會另外開一篇來介紹。
          */
          $MODULE = $CACHE['module']; //把緩存中的數(shù)據(jù)(common.php)存放到數(shù)組中。
          $CHANNEL = $CACHE['channel'];
          $PHPCMS = $CACHE['phpcms'];
          $FIELD = $CACHE['field'];
          unset($CACHE, $ipmatches, $CONFIG['timezone'], $CONFIG['cachedir'], $CONFIG['dbhost'], $CONFIG['dbuser'], $CONFIG['dbpw'], $CONFIG['pconnect'], $CONFIG['dbiscache'], $CONFIG['dbexpires']);
          /**
          unset 掉不需要用的變量.
          */
           
          ?>

          posted on 2008-12-17 23:33 丁克設(shè)計 閱讀(337) 評論(0)  編輯  收藏 所屬分類: PHPCMS整站代碼講解

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          留言簿(6)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 木兰县| 紫云| 鞍山市| 天祝| 白山市| 龙江县| 平南县| 岫岩| 芦溪县| 慈溪市| 浮梁县| 峡江县| 昌图县| 内乡县| 长宁区| 沁水县| 绥江县| 商丘市| 科技| 清水县| 乳山市| 舞钢市| 家居| 湘阴县| 城市| 友谊县| 寿光市| 麟游县| 彰化县| 依兰县| 锡林浩特市| 静安区| 青浦区| 建宁县| 东宁县| 土默特右旗| 顺昌县| 鄂托克前旗| 宁河县| 得荣县| 驻马店市|