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

          PHPCMS['enablebanip'] && ip_banned($PHP_IP)) showmessage($LANG['administrator_banned_this_IP']);
          /**
          $PHPCMS['enablebanip'] 是什么.不用說應該知道了吧.這個就是后臺里面設置是否開啟過濾IP訪問的功能.(因為我沒用過phpcms,我是按照代碼猜的,不對的請指出)從這里就看出了文本緩存也有他的作用的。 ip_banned()函數是什么呢.上菜再說:
          function ip_banned($ip)
          {
          global $PHP_TIME; //前面定義過的.當前的時間
          $ipbanneds = cache_read('banip.php');
          if(!is_array($ipbanneds)) return FALSE;
          foreach($ipbanneds as $v)
          {
          if($v['overtime'] < $PHP_TIME) return FALSE;
          if($ip == $v['ip'] || preg_match("/^".str_replace('.', '[.]', $v['ip'])."$/", $ip)) return TRUE;
          }
          }
          里面也用到了 cache_read() 這個函數,還是讀banip.php 這個文件.banip.php這個文件里面存著你在后臺甚至的要過濾的IP列表.
          里面的邏輯比較簡單.自己消化下了.不明白跟帖問
          showmessage() 函數是提示出錯信息封裝好的一個函數. 國家化的 $LANG['administrator_banned_this_IP']這個看到了吧.這個就是讀語言包里面的.這樣我們就可以出好多個語言版本的程序拉.
          */
          $TEMP = $MOD = $CHA = $CATEGORY = $CAT = array();
          $ftp = $enableftp = $tags = $html = 0;
          /**
          初始化變量.這個是好習慣我們要模仿.
          */
          if(!isset($mod))
          {
          $mod = 'phpcms'; //phpcms 是默認加載的模塊
          }
          elseif($mod != 'phpcms')
          {
          isset($MODULE[$mod]) or exit($LANG['module_not_exists']); // 從緩存中讀加載的模塊是否開啟
          /**
          這個寫法,我十分喜歡,平時也用. xx && dd ; xx and dd ;與運算要同時兩邊都為真整個公式才為真,就是利用這個原理. ; xx || dd ; xx or dd 或運算只要一個條件滿足就不會執行下一個條件而繼續執行下去. 這樣寫是不是很酷.  
          */
          $MOD = cache_read($mod.'_setting.php'); //開始加載這個模塊的一些常用配置數值。 phpcms 對應的每個模塊都有一個緩存配置文件。@@ 怪不得速度那么快
          @include PHPCMS_ROOT.'/languages/'.(defined('IN_ADMIN') ? $CONFIG['adminlanguage'].'/'.$mod.'_admin.lang.php' : $CONFIG['language'].'/'.$mod.'.lang.php');
          /**
          加載想對應的模塊語言包.
          */
          }
          if(!isset($forward)) $forward = $PHP_REFERER; //記錄前一個URL地址。估計以后下面程序有需要用這個變量
          $dosubmit = isset($dosubmit) ? 1 : 0; //記錄是否有表單提交過.也是以后有用
          $channelid = isset($channelid) ? intval($channelid) : 0; //記錄當前頻道的id 如果$channelid 沒有 isset 那么就為 0. intval() 十分有用。數字和數字的比較加減速度會快很多。記得哦
          $skindir = PHPCMS_PATH.'templates/'.$CONFIG['defaulttemplate'].'/skins/'.$CONFIG['defaultskin']; //加載默認phpcms皮膚
          if($PHPCMS['enablegzip'] && function_exists('ob_gzhandler'))
          {
          ($CONFIG['phpcache'] || defined('SHOWJS')) ? ob_start() : ob_start('ob_gzhandler');
          }
          else
          {
          $PHPCMS['enablegzip'] = 0;
          ob_start();
          }
          /**
          $PHPCMS['enablegzip'] 這個變量就是存在于 phpcms_setting.php 文件里。上面已經說過了。每個模塊都有相對應的模塊配置緩存文件(是從數據庫copy過來的信息) 這個變量標致 是否開啟 壓縮傳輸。
          壓縮傳輸,聽名字就知道。就是把數據按照一定的算法壓縮小羅。然后再傳送到客戶端。這樣就可以在有限的帶寬中傳輸更大的數據拉。當然速度快了不少。壓縮的數據到了你的瀏覽器,它就自動解壓縮,老版本的一些瀏覽器不支持解壓縮哦。不過現在還有誰用很久的瀏覽器呢。用法很簡單的:看上面就知道:
          首先判斷下,看客戶老大們是否在后臺選擇了這個模塊的壓縮傳輸(如果是的話。自然的已經加載到了相對應的文本緩存文件里面拉) 標致:$PHPCMS['enablegzip'] 和 判斷 回調函數 ob_gzhandler 是否開啟, ob_gzhandler 其實不算是個函數。看手冊說明。 就這么簡單。它只是一個專門給 ob_start() 做回調使用的一個參數函數。詳細請看下手冊。別偷懶哦,在程序開頭ob_start('ob_gzhandler')就算是開始壓縮傳輸了;判斷完了 如果為真。就繼續下面的代碼:

          ($CONFIG['phpcache'] || defined('SHOWJS')) ? ob_start() : ob_start('ob_gzhandler');
          看代碼phpcms 是這樣的: 如果用戶在后臺開啟了壓縮傳輸。而用戶又開啟了 頁面緩存。那么就默認不使用壓縮傳輸了。我也不知道為什么這樣設計。我測試了下。后臺開啟壓縮傳輸。又同時又使用頁面緩存。沒發現有什么問題。@@
          如果沒開啟壓縮傳輸,那么我們就ob_start(); 使用session 之前必須要 ob_start() ; 而且在ob_start() 之前不能有任何的 頭文件發送和輸出。比如:echo header等要不會出錯的哦。
          */
          $_userid = 0;
          $_username = '';
          $_groupid = 3;
          $_arrgroupid = array();
          $phpcms_auth = getcookie('auth');
          /**
          $_userid,$_username,$_groupid 這幾個記錄用戶信息的變量初始化,不初始化危險就太大了。@@ 如果給人家$_GET一個 _userid 變量過來。那么就會把我們這個變量覆蓋。但是我們如果給這幾個變量一個值,
          那么按照就近原則。就算你GET個變量過來。你也一樣改不了我原來的變量值。大家好好自己想下。就會明白了。
          getcookie() 這個自定義函數在 global.func.php文件里定義的。上菜:
          function getcookie($var)
          {
          global $CONFIG;
          $var = $CONFIG['cookiepre'].$var;
          return isset($_COOKIE[$var]) ? $_COOKIE[$var] : FALSE;
          }
          這個函數用來提取我們設置的cookie 值. $CONFIG['cookiepre'] 在 config.inc.php 文件里面設置,cookie 名的前綴. 函數很簡單。一看就明白不說了。
          */
          if($phpcms_auth)
          {
          $phpcms_auth_key = md5($PHPCMS['authkey'].$_SERVER['HTTP_USER_AGENT']);
          list($_userid, $_password, $_answer) = $phpcms_auth ? explode("\t", phpcms_auth($phpcms_auth, 'DECODE')) : array(0, '', '');
          /**

          posted on 2008-12-19 01:29 丁克設計 閱讀(250) 評論(0)  編輯  收藏 所屬分類: PHPCMS整站代碼講解

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

          導航

          留言簿(6)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 焉耆| 始兴县| 德钦县| 镇康县| 北票市| 曲阜市| 吴忠市| 宣武区| 嘉义县| 昌江| 绥德县| 丰台区| 富蕴县| 临沭县| 沁源县| 通渭县| 兖州市| 新营市| 汨罗市| 潼关县| 青浦区| 宜宾县| 灯塔市| 新泰市| 马龙县| 德惠市| 宝清县| 海丰县| 赤水市| 林周县| 平罗县| 枣强县| 上杭县| 盘锦市| 武安市| 温宿县| 鄂州市| 普陀区| 抚松县| 扶风县| 万载县|