首先每个页面都会载入 include/init.php
if (!defined('IN_ECS')) 每个页面都要设置核心常量 define('IN_ECS', true); 否则 无法调用init.php
{
die('Hacking attempt');
}
error_reporting(E_ALL); 错误提示
if (__FILE__ == '') 不知道干啥的
{
die('Fatal error code: 0');
}
/* 取得当前ecshop所在的根目录 */
define('ROOT_PATH', str_replace('includes/init.php', '', str_replace('\\', '/', __FILE__)));
判断 data/install.lock是否存在 是否跳转到安装install目录
if (!file_exists(ROOT_PATH . 'data/install.lock') && !file_exists(ROOT_PATH . 'includes/install.lock')
&& !defined('NO_CHECK_INSTALL'))
{
header("Location: ./install/index.php\n");
exit;
}
/* 初始化设置 */
@ini_set('memory_limit', '64M'); 设定了一个脚本所能够申请到的最大内存数。防止写得不好的脚本消耗光
@ini_set('session.cache_expire', 180); 指定会话页面在客户端cache中的有效期限(分钟)
@ini_set('session.use_trans_sid', 0); 是否使用明码在URL中显示会话ID。 默认是禁止,它会给你的用户带来安全危险:
@ini_set('session.use_cookies', 1); 是否使用cookie在客户端保存会话ID
@ini_set('session.auto_start', 0); 在客户访问任何页面时都自动初始化会话,默认禁止。; 因为类定义必须在会话启动之前被载入,所以若打开这个选项,你就不能在会话中存放对象。
@ini_set('display_errors', 1); 是否将错误信息作为输出的一部分显示
if (DIRECTORY_SEPARATOR == '\\') 目录分隔符,是定义php的内置变量。在调试机器上,在windows我们习惯性的使用“\”作为文件分隔符,但是在linux上系统不认识这个标识,于是就要引入这个php内置变量了:DIRECTORY_SEPARATOR
{
@ini_set('include_path', '.;' . ROOT_PATH);
这段代码的作用是在 php的 include_path中增加 ROOT_PATH,
由于windows和unix,linux其他操作系统分隔符不同,分别为分号和冒号。
这段代码就通过判断路径分隔符(DIRECTORY_SEPARATOR)是否为'\\'
(windows路径分隔符 \ )来区分哪一个操作系统,从而实现ini_set操作
}
else
{
@ini_set('include_path', '.:' . ROOT_PATH);
}
require(ROOT_PATH . 'data/config.php'); 载入配置文件
if (defined('DEBUG_MODE') == false) 如果没有设置常量 自动设置为0
{
define('DEBUG_MODE', 0);
}
if (PHP_VERSION >= '5.1' && !empty($timezone)) 如果版本大于5.1 并且timezone 不为空 设置时区
{
date_default_timezone_set($timezone);
}
$php_self = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
if ('/' == substr($php_self, -1))
{
$php_self .= 'index.php';
} 如果是主目录 设置脚本首页的inde.php
define('PHP_SELF', $php_self); 定义常量
载入配置文件
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 . 'includes/lib_main.php'); 各种函数
require(ROOT_PATH . 'includes/lib_insert.php'); 模板调用insert 命令的对应函数
require(ROOT_PATH . 'includes/lib_goods.php'); 商品方面的函数库
require(ROOT_PATH . 'includes/lib_article.php'); 文章方便面的函数库
/* 对用户传入的变量进行转义操作。*/
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);
}
/* 创建 ECSHOP 对象 */
$ecs = new ECS($db_name, $prefix);
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->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart')));
$db_host = $db_user = $db_pass = $db_name = NULL;
/* 创建错误处理对象 */
$err = new ecs_error('message.dwt'); 错误信息
/* 载入系统参数 */
$_CFG = load_config(); 读取 shop_config 表里的数据 有缓存的 在lib_common.php
/* 载入语言文件 */
require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php');
if ($_CFG['shop_closed'] == 1)
{
/* 商店关闭了,输出关闭的消息 */
header('Content-type: text/html; charset='.EC_CHARSET);
die('<div style="margin: 150px; text-align: center; font-size: 14px"><p>' . $_LANG['shop_closed'] . '</p><p>' . $_CFG['close_comment'] . '</p></div>');
}
if (is_spider()) is_spider()判断是否为搜索引擎蜘蛛 lib_main.php
{
/* 如果是蜘蛛的访问,那么默认为访客方式,并且不记录到日志中 */
if (!defined('INIT_NO_USERS'))
{
define('INIT_NO_USERS', true);
/* 整合UC后,如果是蜘蛛访问,初始化UC需要的常量 */
if($_CFG['integrate_code'] == 'ucenter')
{
$user = & init_users();
}
}
$_SESSION = array();
$_SESSION['user_id'] = 0;
$_SESSION['user_name'] = '';
$_SESSION['email'] = '';
$_SESSION['user_rank'] = 0;
$_SESSION['discount'] = 1.00;
}
if (!defined('INIT_NO_USERS'))
{
/* 初始化session */
include(ROOT_PATH . 'includes/cls_session.php'); session 存在数据库中
$sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'));
define('SESS_ID', $sess->get_session_id()); cookie的值
}
if(isset($_SERVER['PHP_SELF']))
{
$_SERVER['PHP_SELF']=htmlspecialchars($_SERVER['PHP_SELF']);
}
if (!defined('INIT_NO_SMARTY'))
{
header('Cache-control: private');
header('Content-type: text/html; charset='.EC_CHARSET);
/* 创建 Smarty 对象。*/
require(ROOT_PATH . 'includes/cls_template.php');
$smarty = new cls_template;
$smarty->cache_lifetime = $_CFG['cache_time'];
$smarty->template_dir = ROOT_PATH . 'themes/' . $_CFG['template'];
$smarty->cache_dir = ROOT_PATH . 'temp/caches';
$smarty->compile_dir = ROOT_PATH . 'temp/compiled';
if ((DEBUG_MODE & 2) == 2) &是按位与,也就是DEBUG_MODE的值不等于0或者2时,执行下面代码
{
$smarty->direct_output = true; 直接输出
$smarty->force_compile = true; 强制编译
}
else
{
$smarty->direct_output = false;
$smarty->force_compile = false;
}
$smarty->assign('lang', $_LANG);
$smarty->assign('ecs_charset', EC_CHARSET);
if (!empty($_CFG['stylename'])) 如果有多样式设置
{
$smarty->assign('ecs_css_path', 'themes/' . $_CFG['template'] . '/style_' . $_CFG['stylename'] . '.css');
}
else
{
$smarty->assign('ecs_css_path', 'themes/' . $_CFG['template'] . '/style.css');
}
}
if (!defined('INIT_NO_USERS'))
{
/* 会员信息 */
$user =& init_users(); 会员类
if (!isset($_SESSION['user_id']))
{
/* 获取投放站点的名称 */
$site_name = isset($_GET['from']) ? htmlspecialchars($_GET['from']) : addslashes($_LANG['self_site']);
$from_ad = !empty($_GET['ad_id']) ? intval($_GET['ad_id']) : 0;
$_SESSION['from_ad'] = $from_ad; // 用户点击的广告ID
$_SESSION['referer'] = stripslashes($site_name); // 用户来源
unset($site_name);
if (!defined('INGORE_VISIT_STATS'))
{
visit_stats();
}
}
if (empty($_SESSION['user_id']))
{
if ($user->get_cookie())
{
/* 如果会员已经登录并且还没有获得会员的帐户余额、积分以及优惠券 */
if ($_SESSION['user_id'] > 0)
{
update_user_info();
}
}
else
{
$_SESSION['user_id'] = 0;
$_SESSION['user_name'] = '';
$_SESSION['email'] = '';
$_SESSION['user_rank'] = 0;
$_SESSION['discount'] = 1.00;
if (!isset($_SESSION['login_fail']))
{
$_SESSION['login_fail'] = 0;
}
}
}
/* 设置推荐会员 */
if (isset($_GET['u']))
{
set_affiliate();
}
/* session 不存在,检查cookie */
if (!empty($_COOKIE['ECS']['user_id']) && !empty($_COOKIE['ECS']['password']))
{
// 找到了cookie, 验证cookie信息
$sql = 'SELECT user_id, user_name, password ' .
' FROM ' .$ecs->table('users') .
" WHERE user_id = '" . intval($_COOKIE['ECS']['user_id']) . "' AND password = '" .$_COOKIE['ECS']['password']. "'";
$row = $db->GetRow($sql);
if (!$row)
{
// 没有找到这个记录
$time = time() - 3600;
setcookie("ECS[user_id]", '', $time, '/');
setcookie("ECS[password]", '', $time, '/');
}
else
{
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_name'] = $row['user_name'];
update_user_info(); 更新用户SESSION,COOKIE及登录时间、登录次数。
}
}
if (isset($smarty))
{
$smarty->assign('ecs_session', $_SESSION);
}
}
if ((DEBUG_MODE & 1) == 1)
{
error_reporting(E_ALL);
}
else
{
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
}
if ((DEBUG_MODE & 4) == 4)
{
include(ROOT_PATH . 'includes/lib.debug.php');
}
/* 判断是否支持 Gzip 模式 */
if (!defined('INIT_NO_SMARTY') && gzip_enabled())
{
ob_start('ob_gzhandler');
}
else
{
ob_start();
}
------------------------------------------------------------
打开“/data/config.php”添加以下代码:
define('DEBUG_MODE', 0);
参数说明:
0 //禁用调试模式
1 //显示所有错误
2 //禁用Smarty缓存
4 //使用includes/lib.debug.php
8 //记录查询的SQL“includes/cls_mysql.php query()”到“data/mysql_query_hash_Y_M_D.log”。
lib_main.php ECSHOP 前台公用函数库
update_user_info 更新用户SESSION,COOKIE及登录时间、登录次数。
get_user_info 获取用户信息数组
assign_ur_here 取得当前位置和页面标题
get_parent_cats 获得指定分类的所有上级分类
build_pagetitle 根据提供的数组编译成页面标题
build_urhere 根据提供的数组编译成当前位置
assign_dynamic 获得指定页面的动态内容
assign_articles 分配文章列表给smarty
get_shop_help 分配帮助信息
assign_pager 创建分页信息
get_pager 生成给pager.lbi赋值的数组
get_vote 调用调查内容
get_user_browser 获得浏览器名称和版本
is_spider 判断是否为搜索引擎蜘蛛
get_os 获得客户端的操作系统
visit_stats 统计访问信息
save_searchengine_keyword 保存搜索引擎关键字
get_tags 获得指定用户、商品的所有标记
get_dyna_libs 获取指定主题某个模板的主题的动态模块
dyna_libs_replace 替换动态模块
upload_file 处理上传文件,并返回上传图片名(上传失败时返回图片名为空)
show_message 显示一个提示信息
parse_rate_value 将一个形如+10, 10, -10, 10%的字串转换为相应数字,并返回操作符号
recalculate_price 重新计算购物车中的商品价格:目的是当用户登录时享受会员价格,当用户退出登录时不享受会员价格
assign_comment 查询评论内容
assign_template 将一些常用的参数调到前台使用
time2gmt 将一个本地时间戳转成GMT时间戳
get_user_bonus 查询会员的红包金额
set_affiliate 保存推荐uid
get_affiliate 获取推荐uid
article_categories_tree 获得指定分类同级的所有分类以及该分类下的子分类
get_article_parent_cats 获得指定文章分类的所有上级分类
get_library_number 取得某模板某库设置的数量
get_navigator 取得自定义导航栏列表
license_info 授权信息内容
url_domain 获取域名
lib_common.php ECSHOP 公用函数库
db_create_in 创建像这样的查询: "IN('a','b')";
is_email 验证输入的邮件地址是否合法
is_time 检查是否为一个合法的时间格式
assign_query_info 获得查询时间和次数,并赋值给smarty
region_result 创建地区的返回信息
get_regions 获得指定国家的所有省份
get_shipping_config 获得配送区域中指定的配送方式的配送费用的计算参数
&init_users 初始化会员数据整合类
cat_list 获得指定分类下的子分类的数组
cat_options 过滤和排序所有分类,返回一个带有缩进级别的数组
load_config 载入配置信息
get_brand_list 取得品牌列表
get_brands 获得某个分类下
get_promotion_info 所有的促销活动信息
get_children 获得指定分类下所有底层分类的ID
get_article_children 获得指定文章分类下所有底层分类的ID
get_mail_template 获取邮件模板
order_action 记录订单操作记录
price_format 格式化商品价格
get_virtual_goods 返回订单中的虚拟商品
virtual_goods_ship 虚拟商品发货
virtual_card_shipping 虚拟卡发货
virtual_card_result 返回虚拟卡信息
get_snatch_result 获取指定 id snatch 活动的结果
clear_tpl_files 清除指定后缀的模板缓存或编译文件
clear_compiled_files 清除模版编译文件
clear_cache_files 清除缓存文件
clear_all_files 清除模版编译和缓存文件
smarty_insert_scripts 页面上调用的js文件
smarty_create_pages 创建分页的列表
build_uri 重写 URL 地址
formated_weight 格式化重量:小于1千克用克表示,否则用千克表示
log_account_change 记录帐户变动
article_cat_list 获得指定分类下的子分类的数组
article_cat_options 过滤和排序所有文章分类,返回一个带有缩进级别的数组
uc_call 调用UCenter的函数
exception_handler error_handle回调函数
get_image_path 重新获得商品图片与商品相册的地址
user_uc_call 调用使用UCenter插件时的函数
get_volume_price_list 取得商品优惠价格列表
get_final_price 取得商品最终使用价格
sort_goods_attr_id_array 将 goods_attr_id 的序列按照 attr_id 重新排序
is_spec 是否存在规格
get_package_info 获取指定id package 的信息
get_package_goods 获得指定礼包的商品
get_good_products 取商品的货品列表
get_good_products_select 取商品的下拉框Select列表
get_specifications_list 取商品的规格列表
lib_main.php ECSHOP 后台管理中心公用函数
read_modules 获得所有模块的名称以及链接地址
sys_msg 系统提示信息
admin_log 记录管理员的操作内容
sys_joindate 将通过表单提交过来的年月日变量合成为"2004-05-10"的格式。
set_admin_session 设置管理员的session内容
insert_config 插入一个配置信息
admin_priv 判断管理员对某一个操作是否有权限
check_authz 检查管理员权限
check_authz_json 检查管理员权限,返回JSON格式数据
get_bonus_type 取得红包类型数组(用于生成下拉列表)
get_rank_list 取得用户等级数组,按用户级别排序
get_user_rank 按等级取得用户列表(用于生成下拉列表)
get_position_list 取得广告位置数组(用于生成下拉列表)
create_html_editor 生成编辑器
get_goods_list 取得商品列表:用于把商品添加到组合、关联类、赠品类
get_article_list 取得文章列表:用于商品关联文章
get_yes_no 返回是否(图标no.gif/yes.gif)
get_where_sql 生成过滤条件:用于 get_goodslist 和 get_goods_list