您的位置:首页 > 编程语言 > PHP开发

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

2009-06-30 14:00 489 查看
<?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");
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: