当前位置:无线网络首页 >> 软件开发 >> PHPCMS2008源码浅析
PHPCMS2008源码浅析 (2)
2009-07-21 16:39:54  作者:merlang  来源:数码人家整理  浏览次数:2207  文字大小:【】【】【

 

PPHPCMS2008源码浅析之common.inc.php

<?php
$mtime = explode(' ', microtime());

$phpcms_starttime = $mtime[1] + $mtime[0]; //$mtime[0] 为微秒 $mtime[1]为UNIX时间戳  //DEBUG 用的程序开始时间

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

//销毁一些不用的服务器变量

set_magic_quotes_runtime(0);

//设置魔法字符变化的运行开关,比如说单引号插入数据库,如果开了 magik_quotes的话,就会插入 \',0为关,1为开

define('IN_PHPCMS', TRUE);

//定义常量IN_PHPCMS (此功能是为了访止,网站接口统一为此处进入,把别的页面的这个变量设为 false,别人就不能直接单独从那个页面跑出数据来,一个是为了安全,一个是架构地需要,呵呵,不知道说对了,平时我是这么理解的,如ecshop,dz,大都是这样子)

define('PHPCMS_ROOT', str_replace("\\", '/', substr(dirname(__FILE__), 0, -8))); //定义PHPCMS的根目录位置!

require PHPCMS_ROOT.'/config.inc.php';        //加载配置文件,也就是后台定义的一些变量这个文件我也没有找到,应该是后台生成的config文件

require PHPCMS_ROOT.'/languages/'.$CONFIG['language'].'/phpcms.lang.php';   //加载语言版本,$CONFIG['language']为config.inc.php中的字符所决定,如zh为中文,就高用zh目录下的语言代码,如果是en 同理

require PHPCMS_ROOT.'/include/global.func.php';   //加载全局函数,中间定义了很多功能块,下一步写这个

define('PHPCMS_PATH', $CONFIG['rootpath']); /定义系统路径 value = /phpcms/

define('PHPCMS_CACHEDIR', $CONFIG['cachedir']); //value=PHPCMS_ROOT.'/data/cache/'; //总缓冲目录

// $CONFIG['enablephplog'] ? set_error_handler('phpcms_error') : error_reporting(E_ERROR | E_WARNING | E_PARSE);

$CONFIG['enablephplog'] ? set_error_handler('phpcms_error') : error_reporting(E_ALL); 
//设置错语bug的显示级别 ,如果配置文件中 enablephplog为1那么,就调用phpcms自己定义的error处理程序,否,则将错误信息全部显示出来,自定义的函数phpcms_error
function phpcms_error($errno, $errmsg, $filename, $linenum, $vars)
{
        $filename = str_replace(PHPCMS_ROOT, '.', $filename);
        $filename = str_replace("\\", '/', $filename);
        if(!defined('E_STRICT')) define('E_STRICT', 2048);
        $dt = date('Y-m-d H:i:s');
        $errortype = array (
        E_ERROR           => 'Error',
        E_WARNING         => 'Warning',
        E_PARSE           => 'Parsing Error',
        E_NOTICE          => 'Notice',
        E_CORE_ERROR      => 'Core Error',
        E_CORE_WARNING    => 'Core Warning',
        E_COMPILE_ERROR   => 'Compile Error',
        E_COMPILE_WARNING => 'Compile Warning',
        E_USER_ERROR      => 'User Error',
        E_USER_WARNING    => 'User Warning',
        E_USER_NOTICE     => 'User Notice',
        E_STRICT          => 'Runtime Notice'
        );
        $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
        $err = "<errorentry> ";
        $err .= "\t<datetime>" . $dt . "</datetime> ";
        $err .= "\t<errornum>" . $errno . "</errornum> ";
        $err .= "\t<errortype>" . $errortype[$errno] . "</errortype> ";
        $err .= "\t<errormsg>" . $errmsg . "</errormsg> ";
        $err .= "\t<scriptname>" . $filename . "</scriptname> ";
        $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum> ";
        if (in_array($errno, $user_errors))
        {
                $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace> ";
        }
        $err .= "</errorentry> ";
        error_log($err, 3, PHPCMS_ROOT.'/data/php_error_log.xml');
        @chmod(PHPCMS_ROOT.'/data/php_error_log.xml', 0777);
}

 

 


if($CONFIG['sessionsavepath']) session_save_path($CONFIG['sessionsavepath']); //设置会话保存目录

session_start(); //会话开始

if(function_exists('date_default_timezone_set')) date_default_timezone_set($CONFIG['timezone']); //设置时区

header('Content-type: text/html; charset='.$CONFIG['charset']); //设置输出字符集 global.func.php 中define('CHARSET', 'utf-8');

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown'))

{

$PHP_IP = getenv('HTTP_CLIENT_IP');

}

elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))

{

$PHP_IP = getenv('HTTP_X_FORWARDED_FOR');

}

elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown'))

{

$PHP_IP = getenv('REMOTE_ADDR');

}

elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))

{

$PHP_IP = $_SERVER['REMOTE_ADDR'];

}

preg_match("/[\d\.]{7,15}/", $PHP_IP, $ipmatches);

$PHP_IP = $ipmatches[0] ? $ipmatches[0] : 'unknown';

//获取客户端IP

$PHP_TIME = time();

//获得当前时间UNIX时间戳

$PHP_SELF = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['ORIG_PATH_INFO']);

//获得自己脚本的文件名   如: /test.php

$PHP_QUERYSTRING = $_SERVER['QUERY_STRING'];

// 获得查询字符串 也就是 xxx.php?4982394   问号后面的内容.

$PHP_DOMAIN = $_SERVER['SERVER_NAME'];

//获得服务器的域名   不包括 http://

$PHP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

//链接到当前页面的前一页面的 URL 地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,这个变量不总是正确真实的。

$PHP_SCHEME = $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';

// 获得http端口

$PHP_PORT = $_SERVER['SERVER_PORT'] == '80' ? '' : ':'.$_SERVER['SERVER_PORT'];

//同上

$PHP_SITEURL = $PHP_SCHEME.$PHP_DOMAIN.$PHP_PORT.PHPCMS_PATH;

//得到完整的PHPCMS的URL地址

$PHP_URL = $PHP_SCHEME.$PHP_DOMAIN.$PHP_PORT.$PHP_SELF.($PHP_QUERYSTRING ? '?'.$PHP_QUERYSTRING : '');

//得到当前网页的URL地址

$db_file = $db_class = 'db_'.$CONFIG['database'];

//value=db_mysql

if(!defined('IN_ADMIN'))   //define('IN_ADMIN', TRUE); 这个定义在admin.php文件中

{

if($CONFIG['dbiscache']) $db_file .= '_cache';

//value=db_mysql_cache

if($CONFIG['phpcache'] == '2')

{

       $cachefileid = md5($PHP_SELF.'?'.$PHP_QUERYSTRING);

       //cache文件ID MD5后的字符串

       $cachefiledir = PHPCMS_ROOT.'/data/phpcache/'.substr($cachefileid, 0, 2).'/';

       //cache文件目录

       $cachefile = $cachefiledir.$cachefileid.'.html';

       //CACHE文件

       if(file_exists($cachefile) && ($PHP_TIME < @filemtime($cachefile) + $CONFIG['phpcacheexpires']))

       //如果cache文件存在并且时间小于系统设置的CACHE文件过期时间,执行下面的语句

       {

         require $cachefile;

         //引入cache文件

         exit;

         //程序退出

       }

}

if($PHP_QUERYSTRING && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", $PHP_QUERYSTRING, $urlvar))

{

       parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));

}

$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);

//整理POST数组 .主要是过滤SQL 语句中的一些特殊字符

unset($search_arr, $replace_arr);

//注销不用的变量

}

$magic_quotes_gpc = get_magic_quotes_gpc();

if(!$magic_quotes_gpc)

{

$_POST = new_addslashes($_POST);

$_GET = new_addslashes($_GET);

}

//过滤GET 和POST数组中的数据

@extract($_POST, EXTR_SKIP);

@extract($_GET, EXTR_SKIP);

//展开数组$_POST $_GET

unset($_POST, $_GET);

//注销掉不用的变量

require PHPCMS_ROOT.'/include/'.$db_file.'.class.php'; //数据库操作类

require PHPCMS_ROOT.'/include/tag.func.php';// 标签函数库?

require PHPCMS_ROOT.'/include/extension.inc.php'; //扩展函数库,用户自己定义的函数可以写在这里.

$db = new $db_class;

//建立数据库操作实例

$db->connect($CONFIG['dbhost'], $CONFIG['dbuser'], $CONFIG['dbpw'], $CONFIG['dbname'], $CONFIG['pconnect']);

//建立数据库连接

$db->iscache = $CONFIG['dbiscache'];

//是否CACHE

$db->expires = $CONFIG['dbexpires'];

//SQL连接过期时间

if(!cache_read('table.php'))

//读缓存失败

{

require_once PHPCMS_ROOT.'/include/cache.func.php';

//引入CACHE函数库

cache_all();

// 载入全部缓存

}

$CACHE = cache_read('common.php');//共用CACHE数组赋值给变量   $CACHE

$MODULE = $CACHE['module']; //模块CACHE

$CHANNEL = $CACHE['channel'];//频道CACHE

$PHPCMS = $CACHE['phpcms']; //系统CACHE

$FIELD = $CACHE['field']; //?

unset($CACHE, $ipmatches, $CONFIG['timezone'], $CONFIG['cachedir'], $CONFIG['dbhost'], $CONFIG['dbuser'], $CONFIG['dbpw'], $CONFIG['pconnect'], $CONFIG['dbiscache'], $CONFIG['dbexpires']);

//注销不用的变量

if($PHPCMS['enablebanip'] && ip_banned($PHP_IP)) showmessage($LANG['administrator_banned_this_IP']);

//如果客户端IP在阻止IP范围内,程序终止,显示错误信息!

$TEMP = $MOD = $CHA = $CATEGORY = $CAT = array();//初始化一些变量为空数组

$ftp = $enableftp = $tags = $html = 0;//初始化变量为 空数组

if(!isset($mod))

{

$mod = 'phpcms';

}

elseif($mod != 'phpcms')

{

isset($MODULE[$mod]) or exit($LANG['module_not_exists']);

$MOD = cache_read($mod.'_setting.php');

@include PHPCMS_ROOT.'/languages/'.(defined('IN_ADMIN') ? $CONFIG['adminlanguage'].'/'.$mod.'_admin.lang.php' : $CONFIG['language'].'/'.$mod.'.lang.php');

0

顶一下

0

踩一下
[1] [2] [3] [4] [5] [6] [7] [8] [9]
数码人家 | 版权声明 | 关于我们 | 友情链接 | 联系我们 | 广告服务 | 七年级下册

  • Copyright©2003-2018, 数码人家-网园 All Rights Reserved. 远山投姿欢迎您!
    陕ICP备05016083号-2
  •