你现在的位置:首页 > PHP网站建设知识库 > phpcms > 正文

phpcms代码分析之common.inc.php

PHPCMS真是一个很好的系统,在整体架构和细节处理上都做的很不错。

<?php
define(‘PHPCMS_ROOT’, str_replace(“//”, ‘/’, substr(dirname(__FILE__), 0, -7)));//定义根目录
define(‘MICROTIME_START’, microtime());//定义起始时间
define(‘IN_PHPCMS’, TRUE);//网站入口判断变量
define(‘MAGIC_QUOTES_GPC’, get_magic_quotes_gpc());//是否开始魔法引用
define(‘TIME’, time());//生成时间
set_include_path(PHPCMS_ROOT.‘include/’);//这样设置以后,你需要include这些目录下的文件时,就不需要指定目录,直接include既可。如require ‘config.inc.php’;
set_magic_quotes_runtime(0);//设置PHP 环境配置的变量 magic_quotes_runtime 值。0-关闭 1-打开
unset($LANG, $HTTP_ENV_VARS, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $HTTP_COOKIE_VARS);//释放给定的变量

 

require ‘config.inc.php’;//核心配置文件
require ‘global.func.php’;//全局功能函数
require ‘dir.func.php’;//目录函数操作功能函数
require ‘url.func.php’;//url相关操作函数
require ‘output.class.php’;//数据输出相关函数
require ‘priv_group.class.php’;//组权限类
require ‘times.class.php’;//时间处理类
require PHPCMS_ROOT.‘languages/’.LANG.‘/phpcms.lang.php’;//加载语言函数包

ERRORLOG ? set_error_handler(‘phpcms_error’) : error_reporting(E_ERROR | E_WARNING | E_PARSE);//设置错误处理机制

define(‘IP’, ip());//获取客户端IP
define(‘HTTP_REFERER’, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ”);//获取链接到当前页面的前一页面的URL 地址
define(‘SCRIPT_NAME’, isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : preg_replace(“/(.*)/.php(.*)/i”, “//1.php”, $_SERVER['PHP_SELF']));//获取当前正在执行脚本的文件名
define(‘QUERY_STRING’, $_SERVER['QUERY_STRING']);//查询(query)的字符串(URL 中第一个问号 ? 之后的内容)
define(‘PATH_INFO’, isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ”);//获取本执行文件名后面的路径及参数信息
define(‘DOMAIN’, isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : preg_replace(“/([^:]*)[:0-9]*/i”, “//1″, $_SERVER['HTTP_HOST']));//返回当前主机名
define(‘SCHEME’, $_SERVER['SERVER_PORT'] == ‘443′ ? ‘https://’ : ‘http://’);//测试服务器是否启动了ssl 连接如果是的话。就用https://安全连接来进行通行
define(‘SITE_URL’, SCHEME.$_SERVER['HTTP_HOST'].PHPCMS_PATH);//取得根目录URL地址
define(‘RELATE_URL’, isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : SCRIPT_NAME.(QUERY_STRING ? ‘?’.QUERY_STRING : PATH_INFO));
//访问此页面所需的 URI,把本身的url+它get后的参数,两者md5加密,用来查找和生成cache-id,
define(‘URL’, SCHEME.$_SERVER['HTTP_HOST'].RELATE_URL);//执行文件名的URL地址
define(‘RELATE_REFERER’,urlencode(RELATE_URL));//编码 URL 字符串

if(function_exists(‘date_default_timezone_set’)) date_default_timezone_set(TIMEZONE);//设置时区
header(‘Content-type: text/html; charset=’.CHARSET);//设置页面编码

if(CACHE_PAGE && !defined(‘IN_ADMIN’)) cache_page_start();//根据情况判断是否调用页面缓存
if(GZIP && extension_loaded(‘zlib’)) ini_set(‘zlib.output_compression’, ‘On’);//根据条件判断是否gzip优化
ob_start();//缓存开始,启动ob_start 输出部份转的缓存,flush后,全部输出

$dbclass = ‘db_’.DB_DATABASE;//生成db.class的名字
require $dbclass.‘.class.php’;//引用数据库类

$db = new $dbclass;//新建一个数据库类的对象
$db->connect(DB_HOST, DB_USER, DB_PW, DB_NAME, DB_PCONNECT, DB_CHARSET);//链接数据库

require ’session_’.SESSION_STORAGE.‘.class.php’;//获取cache存储类
$session = new session();//新建一个cache类的对象
session_set_cookie_params(0, COOKIE_PATH, COOKIE_DOMAIN);//设置cookie

if($_REQUEST)//转义Request变量
{
if(MAGIC_QUOTES_GPC)
{
$_REQUEST = new_stripslashes($_REQUEST);
if($_COOKIE) $_COOKIE = new_stripslashes($_COOKIE);
}
else
{
$_POST = new_addslashes($_POST);
$_GET = new_addslashes($_GET);
$_COOKIE = new_addslashes($_COOKIE);
@extract($_POST, EXTR_SKIP);//从数组中将变量导入到当前的符号表 ,比如 $_POST['xx'] 直接就 $xx就可以获取传递过来的东西
@extract($_GET, EXTR_SKIP);
@extract($_COOKIE, EXTR_SKIP);
}
/*判断一下系统是否打开了自动对gpc进行转意这个选择。如果是的话,就不需要我们自动转意了,否则我们自己进行转义*/
if(!defined(‘IN_ADMIN’)) $_REQUEST = filter_xss($_REQUEST, ALLOWED_HTMLTAGS);//如果不是在后台,进行XSS过滤
extract($db->escape($_REQUEST), EXTR_SKIP);
if($_COOKIE) $db->escape($_COOKIE);
}
if(QUERY_STRING && strpos(QUERY_STRING, ‘=’) === false && preg_match(“/^(.*)/.(htm|html|shtm|shtml)$/”, QUERY_STRING, $urlvar))
{
parse_str(str_replace(array(‘/’, ‘-’, ‘ ‘), array(‘&’, ‘=’, ”), $urlvar[1]));
}
/* 将如http://www.beihai.com/dd.php/xx[/url]-23/cc-22.html的伪静态地址进行转化,以使我们可以使用$_GET变量获取。剥离url来获取   传递的字符窜.然后str_replace 来把 ‘/’  ‘-’  替换成标准的  ‘&’ ‘=’,转换后的地址是:http://www.beihai.com/dd.php&xx=23&cc=22。*/
$CACHE = cache_read(‘common.php’);//读cache,common.php缓存文件里面的变量(数据) 这样我们不用从数据库读了每次
if(!$CACHE)
{
require_once ‘cache.func.php’;
cache_all();
$CACHE = cache_read(‘common.php’);
}
extract($CACHE);//将数组转成变量
unset($CACHE);//释放掉不需要的变量

if($PHPCMS['enable_ipbanned'] && ip_banned(IP)) showmessage($LANG['administrator_banned_this_IP']);//IP地址限制
if(!defined(‘IN_ADMIN’))//非法信息屏蔽作用范围(0 禁用,1 前台,2 全站)
{
if(FILTER_ENABLE && filter_word()) showmessage(‘The content including illegal information: ‘.ILLEGAL_WORD.‘ .’);
if($PHPCMS['minrefreshtime'])
{
$cc = new times();
$cc->set(‘cc’, $PHPCMS['minrefreshtime'], 1);
if($cc->check()) showmessage(‘Do not refresh the page in ‘.$PHPCMS['minrefreshtime'].‘ seconds!’);
$cc->add();
unset($cc);
}
if(!isset($forward)) $forward = HTTP_REFERER;
}

$M = $TEMP = array();
if(!isset($mod)) $mod = ‘phpcms’;//设置模块,如果什么也没有设,就用phpcms
if($mod != ‘phpcms’)//如果有设置,调用相关模块的信息,并读取他们生成的cahce
{
isset($MODULE[$mod]) or exit($LANG['module_not_exists']);
$langfile = defined(‘IN_ADMIN’) ? $mod.‘_admin’ : $mod;
@include PHPCMS_ROOT.‘languages/’.LANG.‘/’.$langfile.‘.lang.php’;
$M = cache_read(‘module_’.$mod.‘.php’);
}

$_userid = 0;
$_username = ”;
$_groupid = 3;
$phpcms_auth = get_cookie(‘auth’);//判断是否以前登陆过,并调取认证信息,权限判断
if($phpcms_auth)
{
$auth_key = md5(AUTH_KEY.$_SERVER['HTTP_USER_AGENT']);
list($_userid, $_password) = explode(“/t“, phpcms_auth($phpcms_auth, ‘DECODE’, $auth_key));
$_userid = intval($_userid);
$sql_member = “SELECT * FROM `”.DB_PRE.“member_cache` WHERE `userid`=$_userid“;
$r = $db->get_one($sql_member);
if(!$r && cache_member())
{
$r = $db->get_one($sql_member);
}
if($r && $r['password'] === $_password)
{
if($r['groupid'] == 2)
{
set_cookie(‘auth’, ”);
showmessage($LANG['userid_banned_by_administrator']);
}
@extract($r, EXTR_PREFIX_ALL, ”);
}
else
{
$_userid = 0;
$_username = ”;
$_groupid = 3;
set_cookie(‘auth’, ”);
}
unset($r, $phpcms_auth, $phpcms_auth_key, $_password, $sql_member);
}
$G = cache_read(‘member_group_’.$_groupid.‘.php’);//读会员的组信息
$priv_group = new priv_group();//初始化组用户信息
define(‘SKIN_PATH’, ‘templates/’.TPL_NAME.‘/skins/’.TPL_CSS.‘/’);//加载模板的css文件
define(‘PASSPORT_ENABLE’, ($PHPCMS['uc'] || $PHPCMS['enablepassport'] || $PHPCMS['enableserverpassport']) ? 1 : 0);//设置uc,等其它密码通行证、开关等
?>