管理中心公用文件init.php源码分析

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家

/**
* ERC 管理中心公用文件
* ============================================================================
*/
if (!defined('IN_ERC')) // defined()函数检查某常量是否存在,若常量存在,则返回 true,否则返回 false。
{
die('Hacking attempt');
}
define('ERC_ADMIN', true); //有什么作用,还不是很清楚!
error_reporting(E_ALL);
if (__FILE__ == '')//在什么样的情况下__FILE__这个魔法变量才会为空,搞不清楚!
{
die('Fatal error code: 0');
}
/* 取得当前网站所在的根目录 很不错的方法*/
//echo __FILE__.'<br>';
//echo str_replace('\\', '/', __FILE__).'<br>'; // 自己注意了,第一个参数是str_replace函数要在字符串查找替换的字符,老忘!
//echo str_replace('admin/includes/init.php', '', str_replace('\\', '/', __FILE__)); // 注意了,这个值后还有个'/' 正斜杠 !!!!
define('ROOT_PATH', str_replace('admin/includes/init.php', '', str_replace('\\', '/', __FILE__)));
/* 初始化设置 */
/**
本指令设定了一个脚本所能够申请到的最大内存字节数。这有助于防止写得不好的脚本消耗光服务器上的可用内存,memory_limit是设置PHP使用内存时空间,一般设置为内存的四分之一,应该就查不多了。如512M内存设置128M,1G内存设置256M。设置太大会影响系统速度,因为系统和数据库及其他程序同样需要内存空间,一般系统和数据库内存空间是自己分配的。
*/
@ini_set('memory_limit', '64M');
/**
* 客户端缓存时间 用来控制缓存的会话页面的存活周期。注意session.cache_expire的值的单位为分钟!
*/
@ini_set('session.cache_expire',180);
/* 不尝试从其他地方获得sessionid没怎么搞清楚*/
@ini_set('session.use_trans_sid', 0);
/*sessionid的传递方式,默认是cookie,推荐使用*/
@ini_set('session.use_cookies',1);
/*是否自动启动session,默认为不是,不需要修改*/
@ini_set('session.auto_start', 0);
@ini_set('display_errors',1);
/*
DIRECTORY_SEPARATOR:路径分隔符,linux上就是’/’ windows上是’\’
PATH_SEPARATOR:include多个路径使用,在win下,当你要include多个路径的话,你要用”;”隔开,但在linux下就使用”:”隔开的。
这2个常量的使用能够避免不同平台的兼容性问题。
*/
//echo DIRECTORY_SEPARATOR;
if (DIRECTORY_SEPARATOR == '\\')
{
@ini_set('include_path','.;' . ROOT_PATH);
}
else
{
@ini_set('include_path','.:' . ROOT_PATH);
}
if (file_exists(ROOT_PATH . 'data/config.php'))
{
include(ROOT_PATH . 'data/config.php');
}
else
{
include(ROOT_PATH . 'includes/config.php');// 会有这个文件吗???
}
if (defined('DEBUG_MODE') == false)//调试模式
{
define('DEBUG_MODE', 0);// 它是用来控制缓存的 只要DEBUG_MODE的值不为2 就读缓存
}
/* php中环境变量
PHP_OS—–服务器端的操作系统 ,值为(WINNT,WIN32等)
可以这么使用例如: eregi(”WIN”,PHP_OS) ? “do somthing” : “do other thing”;
PHP_VERSION —– 服务器端的PHP程序版本
可以这么使用例如: echo PHP_VERSION;
*/
// echo PHP_VERSION;
if (PHP_VERSION >= '5.1' && !empty($timezone))
{
date_default_timezone_set($timezone);// 设置时区
}
/*
PHP以 CGI 方式运行,二者就有明显不同的差异。
echo $_SERVER['SCRIPT_NAME']; // (/cgi-system/php.cgi)
echo $_SERVER['PHP_SELF']; // (/admin/test.php)
*/
//echo $_SERVER['PHP_SELF']; 输出:/ERC/admin/***.php当前正在执行脚本的文件名,是当前!!!
//echo $_SERVER['SCRIPT_NAME'];
//echo __FILE__; 输出: D:\www\ERC\admin\includes\init.php绝对路径!!!
if (isset($_SERVER['PHP_SELF']))
{
define('PHP_SELF', $_SERVER['PHP_SELF']);
}
else
{
define('PHP_SELF', $_SERVER['SCRIPT_NAME']);
}
require(ROOT_PATH . 'includes/inc_constant.php');//常量,暂时没多大用
require(ROOT_PATH . 'includes/cls_ecshop.php'); //基础类
require(ROOT_PATH . 'includes/cls_error.php');//用户级错误处理类
require(ROOT_PATH . 'includes/lib_time.php');//时间函数
require(ROOT_PATH . 'includes/lib_base.php');//基础函数库
require(ROOT_PATH . 'includes/lib_common.php'); //公用函数库
require(ROOT_PATH . 'admin/includes/lib_main.php');//管理中心公用函数库
require(ROOT_PATH . 'admin/includes/cls_exchange.php');//后台自动操作数据库的类文件
/* 对用户传入的变量进行转义操作 */
/*
取得 PHP 环境变数 magic_quotes_gpc 的值
本函式取得 PHP 环境设定的变数 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。传回 0 表示关闭本功能;传回 1 表示本功能开启。
当 magic_quotes_gpc 开启时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。
*/
// echo get_magic_quotes_gpc();
if (!get_magic_quotes_gpc())
{
if (!empty($_GET))
{
$_GET= addslashes_deep($_GET);
}
if (!empty($_POST))
{
$_POST = addslashes_deep($_POST);
}
$_COOKIE= addslashes_deep($_COOKIE);
$_REQUEST= addslashes_deep($_REQUEST);
}
/* 对路径进行安全处理 */
// echo PHP_SELF;
if (strpos(PHP_SELF, '.php/') !== false) //strpos() 函数返回字符串在另一个字符串中第一次出现的位置
{ //echo PHP_SELF."<br>";
//echo substr(PHP_SELF, 0, strpos(PHP_SELF, '.php/') + 4) . "\n";
go_header("Location:" . substr(PHP_SELF, 0, strpos(PHP_SELF, '.php/') + 4) . "\n");//这个换行有什么意义吗?
exit();
}
/* 创建 ECSHOP 对象 */
$ecs = new ECS($db_name, $prefix);
//echo $ecs->data_dir("asdf");
define('DATA_DIR', $ecs->data_dir());
define('IMAGE_DIR', $ecs->image_dir());
/* 初始化数据库类 */
require(ROOT_PATH . 'includes/cls_mysql.php');
$db = new cls_mysql($db_host, $db_user, $db_pass, $db_name);
$db_host = $db_user = $db_pass = $db_name = NULL;
/* 创建错误处理对象 */
$err = new ecs_error('message.htm');
/* 初始化session */
require(ROOT_PATH . 'includes/cls_session.php');
$sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'), 'ECSCP_ID');
/* 初始化 action */
if (!isset($_REQUEST['act']))
{
$_REQUEST['act'] = '';
}
elseif (($_REQUEST['act'] == 'login' || $_REQUEST['act'] == 'logout' || $_REQUEST['act'] == 'signin') &&
strpos(PHP_SELF, '/privilege.php') === false)//防黑客???
{
$_REQUEST['act'] = '';
}
elseif (($_REQUEST['act'] == 'forget_pwd' || $_REQUEST['act'] == 'reset_pwd' || $_REQUEST['act'] == 'get_pwd') &&
strpos(PHP_SELF, '/get_password.php') === false)
{
$_REQUEST['act'] = '';
}
/* 载入系统参数 */
$_CFG = load_config(); // 载入temp\static_caches\shop_config.php没有此文件则从数据库erc_shop_config查询
//print_r($_CFG);
// TODO : 登录部分准备拿出去做,到时候把以下操作一起挪过去
if ($_REQUEST['act'] == 'captcha')// 图形验证码
{
include(ROOT_PATH . 'includes/cls_captcha.php');
$img = new captcha('../data/captcha/');
@ob_end_clean(); //清除之前出现的多余输入
$img->generate_image();
exit;
}
//$_CFG['lang'] = "zh_tw";测试
require(ROOT_PATH . 'languages/' .$_CFG['lang']. '/admin/common.php');// 管理中心共用语言文件
require(ROOT_PATH . 'languages/' .$_CFG['lang']. '/admin/log_action.php');// 管理中心管理员操作内容语言文件
// 查找某一php文件,就调用此php页面语言包
// echo basename(PHP_SELF);还回基本文件名
if (file_exists(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/admin/' . basename(PHP_SELF)))
{
include(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/admin/' . basename(PHP_SELF));
}
if (!file_exists('../temp/caches'))
{
@mkdir('../temp/caches', 0777);
@chmod('../temp/caches', 0777);// chmod -- 改变文件模式
}
if (!file_exists('../temp/compiled/admin'))
{
@mkdir('../temp/compiled/admin', 0777);
@chmod('../temp/compiled/admin', 0777);
}
clearstatcache();// clearstatcache -- 清除文件状态缓存此函数具体还不知道到底怎么用
/* 如果有新版本,升级 */
if (!isset($_CFG['ecs_version']))
{
$_CFG['ecs_version'] = 'v2.0.5';
}
if (preg_replace('/(?:\.|\s+)[a-z]*$/i', '', $_CFG['ecs_version']) != preg_replace('/(?:\.|\s+)[a-z]*$/i', '', VERSION)
&& file_exists('../upgrade/index.php'))
{
// 转到升级文件
go_header("Location: ../upgrade/index.php\n");
exit;
}

回答:
收藏了!THX

支持共享

收藏了,学习一下~

不像是2.7的吧!

如假包换

大家也帮我分析分析我没看懂的地方啊

谢谢楼主共享
很强大~

囧,看了几天init.php,快看完了,看到这个帖子,再一对照,不是2.7版本,更囧

你这里面加入了防黑客的代码,2.7的没有,难道是删除了????