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)
分享到:
相关推荐
在实际分析过程中,你可以从以下几个方面入手: 1. **阅读源码**:了解PHPCMS的入口文件,分析URL路由机制,然后逐个查看控制器、模型和视图文件,理解其工作原理。 2. **数据库设计**:查看数据库结构,理解各表...
在进行整站代码分析时,我们首先要了解其核心文件`include/common.inc.php`。这个文件是程序启动的关键,负责初始化环境并设置必要的变量和常量,以确保系统正常运行。 在`common.inc.php`中,可以看到对`microtime...
系统框架主要由以下几个部分组成: 1. **模型(Model)**:处理数据逻辑,与数据库交互,实现数据的增删改查操作。 2. **视图(View)**:负责展示数据,通常是指页面模板,将模型中的数据以用户可读的形式呈现。 3. **...
在进行配置文件的编辑时,还需注意以下几点: 1. 确保你有足够的权限访问和修改配置文件,通常需要服务器上的文件操作权限。 2. 修改配置信息之前,建议先备份原有的配置文件,以防万一修改出错能够恢复。 3. 修改...
当遇到无法删除模型的情况,可能是以下几个原因: 1. 数据依赖:如果模型被其他内容(如栏目、内容、表单等)引用,系统通常不允许直接删除,以防止数据丢失。你需要先解除这些引用关系,或者确保删除模型不会影响...
本文将详细讲解如何在phpcms中实现这一功能。 首先,我们要了解的是,phpcms的图片文字水印功能依赖于服务器端的GD库。GD库是PHP中用于图像处理的核心库,支持创建、修改和显示多种图像格式,包括添加文字和图形...