现在的位置: 首页 > 综合 > 正文

phpcms2007几个核心文件讲解

2018年08月09日 ⁄ 综合 ⁄ 共 5165字 ⁄ 字号 评论关闭
include/common.inc.php



<?php

/**

《PHPCMS2007 include/common.inc.php文件分析》 

作者:fan12 (随便崇拜,不介意) 



本人为大师级分析,高屋建瓴, 

有想看细节分析的google搜“phpcms 源码分析”,有个叫逆水寒的写了几篇小兵级分析,写得很细,可以参考 



phpcms和discuz编码风格差不多,这个common.inc.php文件是几乎所有其他脚本都要包含进去的 



*/





##################################### Section 1 ###################################################



###################################################################################################



/*

处理时间、超级全局变量、魔术引用、定义‘IN_PHPCMS’防止翻墙 

定义根目录PHPCMS_ROOT、包含/include/global.func.php 函数文件 

定义$search_arr、$replace_arr两个数组变量处理数据库操作 



给$_GET,$_POST,$_COOKIE剥皮、转义 

extract $_POST,$_GET以备后用 

unset掉$_POST,$_GET 



*/



$mtime = explode(' ', microtime());

$phpcms_starttime = $mtime[1] + $mtime[0];

unset($LANG, $_REQUEST, $HTTP_ENV_VARS, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $HTTP_COOKIE_VARS);

set_magic_quotes_runtime(0);

define('IN_PHPCMS', TRUE);

define('PHPCMS_ROOT', str_replace("//", '/', substr(dirname(__FILE__), 0, -8)));

require PHPCMS_ROOT.'/include/global.func.php';



$search_arr = array("/ union /i","/ select /i","/ update /i","/ outfile /i","/ or /i");

$replace_arr = array(' union ',' select ',' update ',' outfile ',' or ');

$_POST = strip_sql($_POST);

$_GET = strip_sql($_GET);

$_COOKIE = strip_sql($_COOKIE);

unset($search_arr, $replace_arr);



$magic_quotes_gpc = get_magic_quotes_gpc();

if(!$magic_quotes_gpc)

{

$_POST = new_addslashes($_POST); 

$_GET = new_addslashes($_GET); 

}

@extract($_POST, EXTR_OVERWRITE);

@extract($_GET, EXTR_OVERWRITE);

unset($_POST, $_GET);









admin.php:







<?php 

/**

《phpcms2007 admin.php脚本分析》 

作者:fan12 



phpcms的后台管理最先执行这个脚本,然后根据GET变量mod和file决定include哪个xxx.inc.php, 

再然后在xxx.inc.php里根据GET变量switch($action)决定include哪个xxx.tpl.php模板,显示给用户 

用户再选择点击把新的GET变量mod,file,action,channelid等传到服务器请求admin.php文件,服务器做出响应 



比如刚登陆时就include的是index.inc.php文件,index.inc.php根据action的值indlude相应的模板显示给用户 



大家在后台管理边点边看本分析 

*/



/**

这个脚本最后基本上都会落到最后一句: 

if(!@include $filepath) showmessage($LANG['illegal_operation']); 

$filepath是个xxx.inc.php脚本,xxx根据$file定, 

然后在xxx.inc.php根据swith($action) include对应的admintpl(xxx) 模板文件 

具体可以到admin/templates/下去一个一个看,别的模块下的/admin/templates/也有 

*/



############################################# Section 1 #####################################################



#############################################################################################################



/**

包含了一堆文件,new了session 

处理GET变量file 

关闭cache开关 

处理所有的传递变量:file,action,job,catid,specialid 



*/



define('IN_ADMIN', TRUE);

$rootdir = dirname(__FILE__);

require $rootdir.'/admin/include/global.func.php'; //很多admin相关的函数



require $rootdir.'/include/common.inc.php'; //common.inc.php,phpcms的核心文件,干了很多事,很重要,建议详细看看





$session = new phpcms_session(); //通过common.inc.php里包含进来的/include/session_'.$CONFIG['database'].'.class.php实现





require PHPCMS_ROOT.'/languages/'.$CONFIG['adminlanguage'].'/phpcms_admin.lang.php'; //全是$LANG[],操作交互过程的提示信息



require_once PHPCMS_ROOT.'/include/version.inc.php'; //版本信息,就两行



require_once PHPCMS_ROOT.'/include/formselect.func.php'; //很多和选择相关的函数



require_once PHPCMS_ROOT.'/include/cache.func.php'; //缓存函数,去看相应的脚本和讲解



require_once PHPCMS_ROOT.'/include/post.func.php'; //与发布相关的函数,比如关键字设置,作者更新之类的





//其实根据变量命名就可以看出来,$file--意思就是每次请求的都是一个对应的file



if(!isset($file)) $file = 'index'; //如果$file没设,就给设为'index',相对应的代码会处理



preg_match("/^[0-9A-Za-z_]+$/",$file) or showmessage('Invalid Request.'); //防止$file含非法字符





$db->iscache = 0; //$db 在common.inc里已经new了,那里iscache=$CONFIG['dbiscache'],但后台不能cache,所以设为0,给禁掉



$fileiscache = 0;

$filecaching = 0;



$file = isset($file) ? $file : 'login'; //有点多余,好象是为安全性考虑,不过也是初始化的习惯而已



$action = isset($action) ? $action : ''; //$action初始化



$job = isset($job) ? $job : ''; //同上



$catid = isset($catid) ? intval($catid) : 0; //目录id



$specialid = isset($specialid) ? intval($specialid) : 0; //专题id(应该是)





admin/index.inc.php:







<?php

/**

《phpcms2007 admin/index.inc.php脚本分析》 

作者:fan12 



------------------后台admin首页------------------ 



admin.php的inc文件,file=index就会include该文件 

然后再通过下面的swith()语句,根据action的值执行相应的操作 

*/



############################################# Section 1 #####################################################



#############################################################################################################



/**

判断是否定义IN_PHPCMS或重定向 

定义showresult()函数 

定义zend_optimizer_version()函数 

*/



defined('IN_PHPCMS') or header('location:../admin.php?mod=phpcms&file=index');



function showresult($v)

{

global $LANG; 

return $v ? ' <font color="blue"><b>'.$LANG['yes'].'</b></font>' : '<font color="red"><b>'.$LANG['no'].'</b></font>';

}



if(!function_exists('zend_optimizer_version'))

{

function zend_optimizer_version() 

{ 

ob_start(); 

@phpinfo(); 

$phpinfo = ob_get_contents(); 

ob_end_clean(); 

preg_match( "/Zend(?: | +?Optimizer(?: | +?v([0-9]+/.[0-9]+/.[0-9]+),/",strip_tags($phpinfo),$info); 

return $info[1]; 

} 

}



############################################# Section 2 #####################################################



#############################################################################################################



/**

action的switch()语句,每个case最后都会包含根目录/admin/templates/下的模板文件 

default即index在最下面,执行的是include admintpl('index'); 

admintpl()在admin/include/global.func.php里,返回.$module_dir.'/admin/templates/'.$file.'.tpl.php' 

$module_dir为空则直接返回/admin/templates/'.$file.'.tpl.php 

默认即返回admin/templates/index.tpl.php, 该脚本生成了一个框架 

然后框架顶部src= "?mod=phpcms&file=index&action=top",也就是还请求admin.php,file还=index,不过action=top

左框架src= "?mod=phpcms&file=index&action=mymenu",

右框架src= "?mod=phpcms&file=index&action=main"

*/



switch($action)



抱歉!评论已关闭.