ECSHOP 源码分析(includes/init.php)

 

<?php

/**
 * ECSHOP 前台公用文件
 * ============================================================================
 * 版权所有 (C) 2005-2006 北京亿商互动科技发展有限公司,并保留所有权利。
 * 网站地址: http://www.ecshop.com
 * ----------------------------------------------------------------------------
 * 这是一个免费开源的软件;这意味着您可以在不用于商业目的的前提下对程序代码
 * 进行修改、使用和再发布。
 * ============================================================================
 * @author:     Weber Liu <weberliu@hotmail.com>
 * @version:    v2.0
 * ---------------------------------------------
 * $Author: liry $
 * $Date: 2006-11-21 10:55:39 +0800 (星期二, 21 十一月 2006) $
 * $Id: init.php 2804 2006-11-21 02:55:39Z liry $
*/

define('DEBUG_MODE', false);

if (!defined('IN_ECS'))
{
/*********************************************
die
输出信息并中断 PHP 程序。
语法: void die(string message);
返回值: 无
函数种类: PHP 系统功能
内容说明
本函数将送出字符串到浏览器并中断 PHP 程序 (Script)。参数 message 为欲送出的字符串。
使用范例
下例中,若无法打开 /etc/shadow 时,传给浏览器抱歉,无法打开: /etc/shadow。
<?php
$filename = "/etc/shadow";
$file = @fopen($filename, 'r')
  or die("抱歉,无法?/font>}启: $filename");
echo "本行不会执行";
?>
***********************************************/

    die("Hacking attempt");
}

/* 设置错误提示警告。 */
if (DEBUG_MODE)
{
/******************************************************
error_reporting
配置错误信息回报的等级。
语法: int error_reporting(int [level]);
返回值: 整数
函数种类: PHP 系统功能

内容说明
本函数用来配置错误信息回报的等级,参数 level 是一个整数的位遮罩 (bitmask),见下表。
遮罩值 表示名称
1 E_ERROR 
2 E_WARNING 
4 E_PARSE 
8 E_NOTICE 
16 E_CORE_ERROR 
32 E_CORE_WARNING 
64 E_COMPILE_ERROR 
128 E_COMPILE_WARNING 
256 E_USER_ERROR 
512 E_USER_WARNING 
1024 E_USER_NOTICE 
2047 E_ALL 
2048 E_STRICT 

E_NOTICE 表示一般情形不记录,只有程序有错误情形时才用到,例如企图存取一个不存在的变量,或是呼叫 stat() 函数检视不存在的文件。
E_WARNING 通常都会显示出来,但不会中断程序的执行。这对除错很有效。例如:用有问题的正则表达式呼叫 ereg()。
E_ERROR 通常会显示出来,亦会中断程序执行。意即用这个遮罩无法追查到内存配置或其它的错误。
E_PARSE 从语法中解析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
******************************************************/

    error_reporting(E_ALL);
}
else
{
    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
}

/* 初始化设置 */

/****************************************************
ini_set
(PHP 4 , PHP 5)

ini_set -- Sets the value of a configuration option
设置配置文件的配置项的值
Description
string ini_set ( string varname, string newvalue)


*****************************************************/
@ini_set('session.auto_start',      '0');
@ini_set("session.cache_expire",    180);
@ini_set('session.use_cookies',     '1');
@ini_set('memory_limit',            '16M');

/*预定义常量

名称       说明
__LINE__       文件中的当前行号。 
__FILE__       文件的完整路径和文件名。 
__FUNCTION__   函数名称(这是 PHP 4.3.0 新加的)。 
__CLASS__      类的名称(这是 PHP 4.3.0 新加的)。 
__METHOD__     类的方法名(这是 PHP 5.0.0 新加的)。
 
*/

/* 取得当前ecshop所在的根目录 */
define('ROOT_PATH', str_replace('includes/init.php', '', str_replace('//', '/', __FILE__)));
//die(ROOT_PATH);

/************************************************************
file_exists
检查文件是否存在。
语法: int file_exists(string filename);
返回值: 整数
函数种类: 文件存取
内容说明
本函数用来测试检查文件是否存在,返回 true 表示文件存在。返回值放在快取缓冲区中,可以参考 clearstatcache()。
*************************************************************/

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;
}
/*******************************************************************
clearstatcache
清除文件状态快取。
语法: void clearstatcache(void);
返回值: 无
函数种类: 文件存取

内容说明
对操作系统而言,使用 stat() 或 lstat() 二个函数是很耗资源的,尤其是当每次都要重新呼叫 stat() 及 lstat() 二个函数时,
更是不经济的方式。因此为节省资源,PHP 系统会将文件状态放在快取内存中,以便随时使用。而本函数就是提供清除快取内存中
文件信息的函数。受本函数影响的函数有 stat()、lstat()、file_exists()、is_writeable()、is_readable()、is_executable()、
is_file()、is_dir()、is_link()、filectime()、fileatime()、filemtime()、fileinode()、filegroup()、fileowner()、filesize()、
filetype() 及 fileperms() 等十八个。
*******************************************************************/

clearstatcache();

require_once(ROOT_PATH."data/config.php");

require_once(ROOT_PATH."includes/inc_constant.php");
require_once(ROOT_PATH."includes/cls_ecshop.php");
require_once(ROOT_PATH."includes/adodb/adodb.inc.php");
require_once(ROOT_PATH."includes/lib_insert.php");
require_once(ROOT_PATH."includes/lib_common.php");
require_once(ROOT_PATH."includes/lib_main.php");
require_once(ROOT_PATH."includes/cls_smtp.php");
require_once(ROOT_PATH."includes/smarty/Smarty.class.php");
require_once(ROOT_PATH."includes/lib_goodscat.php");
require_once(ROOT_PATH."includes/cls_image.php");

if (DEBUG_MODE)
{
    include_once(ROOT_PATH."includes/lib.debug.php");
}

/* 初始化数据库类 */
$db = &NewADOConnection('mysql');
$db->Connect($db_host, $db_user, $db_pass, $db_name) or die("Connect to mysql database is failed");

/* 初始化session */
$ADODB_SESSION_DRIVER           ='mysql';
$ADODB_SESSION_CONNECT          = $db_host;   
$ADODB_SESSION_USER             = $db_user;  
$ADODB_SESSION_PWD              = $db_pass;   
$ADODB_SESSION_DB               = $db_name;     
$ADODB_SESSION_TBL              = $prefix . 'sessions';
$ADODB_SESSION_RELATED_TBL      = $prefix . 'cart';
require_once(ROOT_PATH.'includes/adodb/session/adodb-session.php');   
adodb_sess_open(false,false,false);   

header("Cache-control: private");
header("content-type:text/html; charset=utf-8");

session_name('ECS_ID');
session_start();

define('SESS_ID',   session_id());

/*
get_magic_quotes_gpc
取得 PHP 环境变量 magic_quotes_gpc 的值。
语法: long get_magic_quotes_gpc(void);
返回值: 长整数
函数种类: PHP 系统功能
内容说明
本函数取得 PHP 环境配置的变量 magic_quotes_gpc
(GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;
返回 1 表示本功能打开。当 magic_quotes_gpc 打开时
,所有的 ' (单引号), " (双引号), / (反斜线) and
空字符会自动转为含有反斜线的溢出字符。
*/

 

/* 对用户传入的变量进行AddAlash操作。*/
if (!get_magic_quotes_gpc()) {
    function addslashes_deep($value)
    {

/*
     AddSlashes  字符串加入斜线。
                    语法: string addslashes(string str);
                    返回值: 字符串
                    函数种类: 资料处理
                    内容说明
                    本函数使需要让数据库处理的字符串,引号的部份加上斜线,
     以供数据库查询 (query) 能顺利运作。这些会被改的字符包
     括单引号 (')、双引号 (")、反斜线 backslash (/) 以及空
     字符 NUL (the null byte)。

array_map --  将回调函数作用到给定数组的单元上
说明
array array_map ( mixed callback, array arr1 [, array ...] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。
callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
例子 1. array_map() 例子
<?php
function cube($n) {
    return $n*$n*$n;
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?> 
这使得 $b 成为:
Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)
 
     */


        $value = is_array($value) ?
                    array_map('addslashes_deep', $value) :

                    addslashes($value);

        return $value;
    }

    $_POST      = array_map('addslashes_deep', $_POST);
    $_GET       = array_map('addslashes_deep', $_GET);
    $_COOKIE    = array_map('addslashes_deep', $_COOKIE);
    $_REQUEST   = array_map('addslashes_deep', $_REQUEST);
}


/* 创建 ECSHOP 对象 */
$ecs = new ECS($db_name, $prefix);

/* 载入系统参数 */

$_CFG = load_config();//includes/lib_common.php

/* 载入语言文件 */
require_once(ROOT_PATH.'languages/' .$_CFG['lang']. '/common.php');

if ($_CFG['shop_closed'] == 1)
{
    header('content-type:text/html; charset=utf-8');
    die('<div style="margin: 150px; text-align: center; font-size: 14px"><p>'. $_LANG['shop_closed']. '</p><p>'. $_CFG['close_comment']. '</p></div>');
}

/* 如果有新版本,升级 */
if (!isset($_CFG['ecs_version']))
{
    $_CFG['ecs_version'] = 'v2.0.5';
}
if ($_CFG['ecs_version'] != VERSION && file_exists('upgrade'))
{
    header('content-type:text/html; charset=utf-8');
    die('<div style="margin: 150px; text-align: center; font-size: 14px"><p>'. $_LANG['shop_upgrade']. '</p></div>');
}

/* 去掉商品默认图片前面的 ../ */
$_CFG['no_picture'] = str_replace('../', './', $_CFG['no_picture']);

/* 创建 Smarty 对象。*/
$smarty = new Smarty;

if (!file_exists(ROOT_PATH.'templates/caches'))
{
    @mkdir(ROOT_PATH.'templates/caches');
    @chmod(ROOT_PATH.'templates/caches', 0777);
}
clearstatcache();

$smarty->template_dir   = ROOT_PATH.'templates';
$smarty->cache_lifetime = $_CFG['cache_time'];
$smarty->cache_dir      = ROOT_PATH.'templates/caches';
$smarty->compile_dir    = ROOT_PATH.'templates/compiled';
$smarty->compile_force  = false;
$smarty->compile_check  = true;

$smarty->register_resource("db", array("db_get_template", "db_get_timestamp", "db_get_secure", "db_get_trusted"));

$smarty->assign('lang',             $_LANG);
$smarty->assign('thumb_width',      $_CFG['thumb_width']);
$smarty->assign('thumb_height',     $_CFG['thumb_height']);
$smarty->assign('integral_name',    $_CFG['integral_name']);
$smarty->assign('qq',               explode(',', $_CFG['qq']));
$smarty->assign('ww',               explode(',', $_CFG['ww']));
$smarty->assign('ym',               explode(',', $_CFG['ym']));
$smarty->assign('msn',              explode(',', $_CFG['msn']));
$smarty->assign('stats_code',       $_CFG['stats_code']);
$smarty->assign('copyright',        sprintf($_LANG['copyright'], date('Y'), $_CFG['shop_name']));
$smarty->assign('shop_name',        $_CFG['shop_name']);
$smarty->assign('service_email',    $_CFG['service_email']);
$smarty->assign('service_phone',    $_CFG['service_phone']);
$smarty->assign('shop_address',     $_CFG['shop_address']);
$smarty->assign('ecs_version',      VERSION);
$smarty->assign('icp_number',       $_CFG['icp_number']);
$smarty->assign('declaration',      assign_declaration());
$smarty->assign('username',         empty($_SESSION['user_name']) ? '' : $_SESSION['user_name']);

/* 会员信息 */
$user  =& init_users();

if (!isset($_SESSION['user_id']))
{
    /* 获取投放站点的名称 */
    $site_name = isset($_GET['from']) ? urldecode($_GET['from']) : $_LANG['self_site'];
    $from_ad   = empty($_GET['id']) ? 0 : $_GET['id'];

    $_SESSION['shopping_flow']  = 'cart';                       // 购物车的当前步骤
    $_SESSION['from_ad']        = $from_ad;                     // 用户点击的广告ID
    $_SESSION['referer']        = $site_name;                   // 用户来源

    visit_stats();
}

if (!isset($_SESSION['user_id']) || empty($_SESSION['user_id']))
{
    if ($user->get_cookie())
    {
        // 如果会员已经登录并且还没有获得会员的帐户余额、积分以及优惠券
        if (!isset($_SESSION['user_money']) && $_SESSION['user_id'] > 0)
        {
            get_user_info();
        }
    }
    else
    {
        $_SESSION['user_id']        = 0;
        $_SESSION['user_name']      = '';
        $_SESSION['email']          = '';
        $_SESSION['user_rank']      = 0;
        $_SESSION['user_money']     = 0;
        $_SESSION['user_points']    = 0;
        $_SESSION['user_bonus']     = 0;
        $_SESSION['discount']       = 1.00;
    }

}

/* 判断是否支持gzip模式 */
if (PHP_OS >= '4.3' && function_exists('gzcompress') && $_CFG['enable_gzip'])
{
    ob_start("ob_gzhandler");
}
?>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值