PHPCMS['enablebanip'] && ip_banned($PHP_IP)) showmessage($LANG['administrator_banned_this_IP']);
/**
$PHPCMS['enablebanip'] 是什么.不用說應(yīng)該知道了吧.這個就是后臺里面設(shè)置是否開啟過濾IP訪問的功能.(因?yàn)槲覜]用過phpcms,我是按照代碼猜的,不對的請指出)從這里就看出了文本緩存也有他的作用的。 ip_banned()函數(shù)是什么呢.上菜再說:
function ip_banned($ip)
{
global $PHP_TIME; //前面定義過的.當(dāng)前的時間
$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() 這個函數(shù),還是讀banip.php 這個文件.banip.php這個文件里面存著你在后臺甚至的要過濾的IP列表.
里面的邏輯比較簡單.自己消化下了.不明白跟帖問
showmessage() 函數(shù)是提示出錯信息封裝好的一個函數(shù). 國家化的 $LANG['administrator_banned_this_IP']這個看到了吧.這個就是讀語言包里面的.這樣我們就可以出好多個語言版本的程序拉.
*/
$TEMP = $MOD = $CHA = $CATEGORY = $CAT = array();
$ftp = $enableftp = $tags = $html = 0;
/**
初始化變量.這個是好習(xí)慣我們要模仿.
*/
if(!isset($mod))
{
$mod = 'phpcms'; //phpcms 是默認(rèn)加載的模塊
}
elseif($mod != 'phpcms')
{
isset($MODULE[$mod]) or exit($LANG['module_not_exists']); // 從緩存中讀加載的模塊是否開啟
/**
這個寫法,我十分喜歡,平時也用. xx && dd ; xx and dd ;與運(yùn)算要同時兩邊都為真整個公式才為真,就是利用這個原理. ; xx || dd ; xx or dd 或運(yùn)算只要一個條件滿足就不會執(zhí)行下一個條件而繼續(xù)執(zhí)行下去. 這樣寫是不是很酷.
*/
$MOD = cache_read($mod.'_setting.php'); //開始加載這個模塊的一些常用配置數(shù)值。 phpcms 對應(yīng)的每個模塊都有一個緩存配置文件。@@ 怪不得速度那么快
@include PHPCMS_ROOT.'/languages/'.(defined('IN_ADMIN') ? $CONFIG['adminlanguage'].'/'.$mod.'_admin.lang.php' : $CONFIG['language'].'/'.$mod.'.lang.php');
/**
加載想對應(yīng)的模塊語言包.
*/
}
if(!isset($forward)) $forward = $PHP_REFERER; //記錄前一個URL地址。估計以后下面程序有需要用這個變量
$dosubmit = isset($dosubmit) ? 1 : 0; //記錄是否有表單提交過.也是以后有用
$channelid = isset($channelid) ? intval($channelid) : 0; //記錄當(dāng)前頻道的id 如果$channelid 沒有 isset 那么就為 0. intval() 十分有用。數(shù)字和數(shù)字的比較加減速度會快很多。記得哦
$skindir = PHPCMS_PATH.'templates/'.$CONFIG['defaulttemplate'].'/skins/'.$CONFIG['defaultskin']; //加載默認(rèn)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 文件里。上面已經(jīng)說過了。每個模塊都有相對應(yīng)的模塊配置緩存文件(是從數(shù)據(jù)庫copy過來的信息) 這個變量標(biāo)致 是否開啟 壓縮傳輸。
壓縮傳輸,聽名字就知道。就是把數(shù)據(jù)按照一定的算法壓縮小羅。然后再傳送到客戶端。這樣就可以在有限的帶寬中傳輸更大的數(shù)據(jù)拉。當(dāng)然速度快了不少。壓縮的數(shù)據(jù)到了你的瀏覽器,它就自動解壓縮,老版本的一些瀏覽器不支持解壓縮哦。不過現(xiàn)在還有誰用很久的瀏覽器呢。用法很簡單的:看上面就知道:
首先判斷下,看客戶老大們是否在后臺選擇了這個模塊的壓縮傳輸(如果是的話。自然的已經(jīng)加載到了相對應(yīng)的文本緩存文件里面拉) 標(biāo)致:$PHPCMS['enablegzip'] 和 判斷 回調(diào)函數(shù) ob_gzhandler 是否開啟, ob_gzhandler 其實(shí)不算是個函數(shù)。看手冊說明。 就這么簡單。它只是一個專門給 ob_start() 做回調(diào)使用的一個參數(shù)函數(shù)。詳細(xì)請看下手冊。別偷懶哦,在程序開頭ob_start('ob_gzhandler')就算是開始壓縮傳輸了;判斷完了 如果為真。就繼續(xù)下面的代碼:
($CONFIG['phpcache'] || defined('SHOWJS')) ? ob_start() : ob_start('ob_gzhandler');
看代碼phpcms 是這樣的: 如果用戶在后臺開啟了壓縮傳輸。而用戶又開啟了 頁面緩存。那么就默認(rèn)不使用壓縮傳輸了。我也不知道為什么這樣設(shè)計。我測試了下。后臺開啟壓縮傳輸。又同時又使用頁面緩存。沒發(fā)現(xiàn)有什么問題。@@
如果沒開啟壓縮傳輸,那么我們就ob_start(); 使用session 之前必須要 ob_start() ; 而且在ob_start() 之前不能有任何的 頭文件發(fā)送和輸出。比如:echo header等要不會出錯的哦。
*/
$_userid = 0;
$_username = '';
$_groupid = 3;
$_arrgroupid = array();
$phpcms_auth = getcookie('auth');
/**
$_userid,$_username,$_groupid 這幾個記錄用戶信息的變量初始化,不初始化危險就太大了。@@ 如果給人家$_GET一個 _userid 變量過來。那么就會把我們這個變量覆蓋。但是我們?nèi)绻o這幾個變量一個值,
那么按照就近原則。就算你GET個變量過來。你也一樣改不了我原來的變量值。大家好好自己想下。就會明白了。
getcookie() 這個自定義函數(shù)在 global.func.php文件里定義的。上菜:
function getcookie($var)
{
global $CONFIG;
$var = $CONFIG['cookiepre'].$var;
return isset($_COOKIE[$var]) ? $_COOKIE[$var] : FALSE;
}
這個函數(shù)用來提取我們設(shè)置的cookie 值. $CONFIG['cookiepre'] 在 config.inc.php 文件里面設(shè)置,cookie 名的前綴. 函數(shù)很簡單。一看就明白不說了。
*/
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, '', '');
/**