`
sony-soft
  • 浏览: 1105451 次
文章分类
社区版块
存档分类
最新评论

phpcms2007几个核心文件讲解

 
阅读更多
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)



分享到:
评论

相关推荐

    PHPCMS_整站代码分析讲解

    在实际分析过程中,你可以从以下几个方面入手: 1. **阅读源码**:了解PHPCMS的入口文件,分析URL路由机制,然后逐个查看控制器、模型和视图文件,理解其工作原理。 2. **数据库设计**:查看数据库结构,理解各表...

    PHPCMS整站代码分析讲解.doc

    在进行整站代码分析时,我们首先要了解其核心文件`include/common.inc.php`。这个文件是程序启动的关键,负责初始化环境并设置必要的变量和常量,以确保系统正常运行。 在`common.inc.php`中,可以看到对`microtime...

    phpcms2008二次开发资料

    系统框架主要由以下几个部分组成: 1. **模型(Model)**:处理数据逻辑,与数据库交互,实现数据的增删改查操作。 2. **视图(View)**:负责展示数据,通常是指页面模板,将模型中的数据以用户可读的形式呈现。 3. **...

    phpcms链接数据库的配置文件在哪

    在进行配置文件的编辑时,还需注意以下几点: 1. 确保你有足够的权限访问和修改配置文件,通常需要服务器上的文件操作权限。 2. 修改配置信息之前,建议先备份原有的配置文件,以防万一修改出错能够恢复。 3. 修改...

    phpcms删除模型.rar_phpcms 删除模型_phpcms修改模型

    当遇到无法删除模型的情况,可能是以下几个原因: 1. 数据依赖:如果模型被其他内容(如栏目、内容、表单等)引用,系统通常不允许直接删除,以防止数据丢失。你需要先解除这些引用关系,或者确保删除模型不会影响...

    phpcms添加图片文字水印效果

    本文将详细讲解如何在phpcms中实现这一功能。 首先,我们要了解的是,phpcms的图片文字水印功能依赖于服务器端的GD库。GD库是PHP中用于图像处理的核心库,支持创建、修改和显示多种图像格式,包括添加文字和图形...

Global site tag (gtag.js) - Google Analytics