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

          恩.終于把common.inc.php 這個文件大概講解完了. 這個文件里面包含了很多東西.都是些挺不錯的思想.大家應該好好學習.這樣我們寫出來的PHP程序會更加強壯.
          ,偶現在晚上都在邊陪老婆邊看電影邊弄linux 的C,還是學習 階段 所以時間有點緊.白天在公司擠點時間出來分析代碼羅.
           
          對于phpcms 我也是第一次接觸.以前沒裝過也沒用過.現在也沒詳細用過.所以我看到代碼講什么我就講什么.沒具體講PHPCMS的應用等.希望理解.
           
          如果我分析代碼分析得不合理.請指出.功能進步學習.謝謝復制PHP內容到剪貼板PHP代碼: */
          require PHPCMS_ROOT.'/include/'.$db_file.'.class.php'; // 包含數據庫操作類,下章詳說
          require PHPCMS_ROOT.'/include/tag.func.php';  //遇到再說
          require PHPCMS_ROOT.'/include/extension.inc.php'; //遇到再說
          $db = new $db_class;   // 實例化數據庫類
          $db->connect($CONFIG['dbhost'], $CONFIG['dbuser'], $CONFIG['dbpw'], $CONFIG['dbname'], $CONFIG['pconnect']); //連接數據庫@_@
          $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() 函數 讀緩存文件函數存在 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); //這一步是用來判斷是不是本站內模塊,如果沒有傳入值的話就調用這個緩存,反之則得到他的內容。
          }
          就這么簡單.文本緩存,在一些大的開源的PHP項目中經常見到.主要是為了減輕數據庫的負荷的. 比如在程序啟動文件里面,就把一些后臺配置的常用信息緩存到php文件里面.然后在以后的程序就可以直接使用而不用每次都訪問數據庫了.但對經常要更新的信息.最好不要用文本緩存這形式,因為PHP文件內置的文件鎖flock()不是很好用.大系統中多用戶同時寫訪問的時候有可能會把緩存文件破壞.大系統建議使用 memcached  mysql5.1 分區  mysql 主從 來實現負載均衡 @=@ 廢話太多了. 這個函數很簡單.自己看下就明白了.如果緩存和模式變量 $mode 是否為 i 是就include 不是就 把文件以字符竄形式讀到內存中.
          如果 cache_read()找不到緩存文件'table.php'就會返回false,那么就 加栽 cache.func.php  文件.它里面是些創建緩存的一些函數. 然后呢執行 cache_all()函數生成所有的常用信息緩存.
          關于phpcms 的緩存更詳細包括生成原理.打算在弄完啟動文件common.inc.php 后再開篇寫個詳細的.  
          */
          $CACHE = cache_read('common.php');
          /**
          加載 common.php 緩存文件里面的變量(數據) 這樣我們不用從數據庫讀了每次.是吧
          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' => '',
          )
          ?>
          看到了吧.這個就是全部從數據庫里面生成的文本緩存信息.我們不用每次都連接數據庫讀數據庫.而只要訪問里面的數組就可以得到一些配置信息.
          這個就是文本緩存的作用了,至于怎么會生成這個文本緩存文件的.我會另外開一篇來介紹。
          */
          $MODULE = $CACHE['module']; //把緩存中的數據(common.php)存放到數組中。
          $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 丁克設計 閱讀(337) 評論(0)  編輯  收藏 所屬分類: PHPCMS整站代碼講解

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

          導航

          留言簿(6)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 巩留县| 雷州市| 庆阳市| 鄂尔多斯市| 广德县| 通山县| 凯里市| 皮山县| 太湖县| 松江区| 云和县| 香河县| 辽宁省| 横山县| 浪卡子县| 平乐县| 彭州市| 六安市| 澎湖县| 汝南县| 金乡县| 周口市| 布尔津县| 商城县| 迭部县| 莱阳市| 甘肃省| 阿克| 嫩江县| 平南县| 澎湖县| 金溪县| 万源市| 井陉县| 航空| 读书| 特克斯县| 南郑县| 开远市| 安化县| 霞浦县|