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, '', '');
/**