- 转载 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', emptyempty($_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 = emptyempty($_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']) || emptyempty($_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");
- }
- ?>
转载 ECSHOP 源码分析(includes/init.php)
最新推荐文章于 2024-08-13 14:54:57 发布