ecshop init.php檔案分析

huidaoli發表於2013-07-22

1.  ecshop init.php檔案分析
2.  <?php 
3.  
4.  /** 
5.  * ECSHOP 前臺公用檔案 
6.  *
===========================================================================

7.  * 版權所有  2005-2008 上海商派網路科技有限公司,並保留所有權利。 
8.  * 網站地址: [url]http://www.ecshop.com[/url]; 
9.  * ---------------------------------------------------------------------------- 
10.  * 這不是一個自由軟體!您只能在不用於商業目的的前提下對程式程式碼進行修改和 
11.  * 使用;不允許對程式程式碼以任何形式任何目的的再發布。 
12.  *
===========================================================================

13.  * $Author: likai $ 
14.  * $Id: init.php 16132 2009-05-31 08:59:15Z likai $ 
15.  */ 
16.  
17.  // 禁止跨域引入檔案. 
18.  if (!defined('IN_ECS')){ 
19.  die('Hacking attempt'); //  黑客企圖 
20.  } 
21.  
22.  // 無用程式碼,後期功能覆蓋 
23.  error_reporting(E_ALL); 
24.  
25.  // 防止菜鳥將此變數從GET POST 或者新常量定義. 
26.  if (__FILE__ == ''){ 
27.  die('Fatal error code: 0'); 
28.  } 
29.  
30.  /* 取得當前ecshop所在的根目錄  比discuz的複雜  */ 
31.  define('ROOT_PATH', str_replace('includes/init.php', '', str_replace('\', '/', __FILE__))); 
32.  
33.  // 判斷data目錄中的install檔案不存在  && include中的安裝鎖檔案不存在 並且沒有定義
NO_CHECK_INSTALL常量,  就跳轉到安裝頁. 
34.  if (!file_exists(ROOT_PATH . 'data/install.lock') && !file_exists(ROOT_PATH . 'includes/install.lock') 
35.  && !defined('NO_CHECK_INSTALL')) 
36.  { 
37.  header("Location: ./install/index.phpn"); 
38.  exit; 
39.  } 
40.  
41.  /* 初始化設定  */ 
42.  @ini_set('memory_limit', '64M'); 
43.  @ini_set('session.cache_expire', 180); 
44.  @ini_set('session.use_trans_sid', 0); 
45.  @ini_set('session.use_cookies', 1); 
46.  @ini_set('session.auto_start', 0); 
47.  @ini_set('display_errors', 1); //  開啟報錯. 
48.  
49.  //設定通用的引入目錄. wind 是  .;  新的目錄  linux是  .:  就是以什麼為分隔. 
50.  if (DIRECTORY_SEPARATOR == '\'){ 
51.  @ini_set('include_path', '.;' . ROOT_PATH); 
52.  } 
53.  else 
54.  { 
55.  @ini_set('include_path', '.:' . ROOT_PATH); 
56.  } 
57.  // 引入配置檔案.簡單的配置. 
58.  require(ROOT_PATH . 'data/config.php'); 
59.  
60.  // 養成良好的習慣,  凡是常量定義,都判斷一下是否已經定義過. 
61.  if (defined('DEBUG_MODE') == false){ 
62.  define('DEBUG_MODE', 0); //  定義為0 
63.  } 
64.  
65.  //版本判斷,  如果版本低於5.1 並表$timezone不為空. $timezone來自  config.php檔案 
66.  if (PHP_VERSION >= '5.1' && !empty($timezone)) 
67.  { 
68.  date_default_timezone_set($timezone); //  設定通用時區. 
69.  } 
70.  
71.  //獲得當前檔案,不包括GET; 
72.  $php_self = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] :
$_SERVER['SCRIPT_NAME']; 
73.  
74.  // 假如使用者訪問的是目錄,  就自動新增index.php預設頁. 
75.  if ('/' == substr($php_self, -1)){ 
76.  $php_self .= 'index.php'; 
77.  } 
78.  // 然後將當前頁路徑定義為常量,PHP_SELF;  沒有域名導向的. 
79.  define('PHP_SELF', $php_self); 
80.  
81.  // 開始引入檔案了.日後再一個一個分析. 
82.  require(ROOT_PATH . 'includes/inc_constant.php'); 
83.  require(ROOT_PATH . 'includes/cls_ecshop.php'); 
84.  require(ROOT_PATH . 'includes/cls_error.php'); 
85.  require(ROOT_PATH . 'includes/lib_time.php'); 
86.  require(ROOT_PATH . 'includes/lib_base.php'); 
87.  require(ROOT_PATH . 'includes/lib_common.php'); 
88.  require(ROOT_PATH . 'includes/lib_main.php'); 
89.  require(ROOT_PATH . 'includes/lib_insert.php'); 
90.  require(ROOT_PATH . 'includes/lib_goods.php'); 
91.  require(ROOT_PATH . 'includes/lib_article.php'); 
92.  
93.  /* 對使用者傳入的變數進行轉義操作。*/ //通用轉義方法.  沒discuz優化. 
94.  if (!get_magic_quotes_gpc()) 
95.  { 
96.  if (!empty($_GET)) 
97.  { 
98.  $_GET = addslashes_deep($_GET); 
99.  } 
100.  if (!empty($_POST)) 
101.  { 
102.  $_POST = addslashes_deep($_POST); 
103.  } 
104.  
105.  $_COOKIE = addslashes_deep($_COOKIE); 
106.  $_REQUEST = addslashes_deep($_REQUEST); 
107.  } 
108.  
109.  /* 建立  ECSHOP 物件  */ 
110.  $ecs = new ECS($db_name, $prefix); 
111.  
112.  //定義資料目錄及圖片目錄. 
113.  define('DATA_DIR', $ecs->data_dir()); 
114.  define('IMAGE_DIR', $ecs->image_dir()); 
115.  
116.  /* 初始化資料庫類  */ 
117.  require(ROOT_PATH . 'includes/cls_mysql.php'); 
118.  $db = new cls_mysql($db_host, $db_user, $db_pass, $db_name); 
119.  // 設定不充許快取的表,  比如使用者動作,欄目. 
120.  $db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'),
$ecs->table('cart'))); 
121.  $db_host = $db_user = $db_pass = $db_name = NULL; 
122.  
123.  /* 建立錯誤處理物件  */ 
124.  $err = new ecs_error('message.dwt'); 
125.  
126.  /* 載入系統引數  */ 
127.  $_CFG = load_config(); 
128.  
129.  /* 載入語言檔案  */ 
130.  require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php'); 
131.  if ($_CFG['shop_closed'] == 1) 
132.  { 
133.  /* 商店關閉了,輸出關閉的訊息  */ 
134.  header('Content-type: text/html; charset='.EC_CHARSET); 
135.  
136.  die('<div style="margin: 150px; text-align: center; font-size: 14px"><p>' . $_LANG['shop_closed'] .
'</p><p>' . $_CFG['close_comment'] . '</p></div>'); 
137.  } 
138.  
139.  if (is_spider()) 
140.  { 
141.  /* 如果是蜘蛛的訪問,那麼預設為訪客方式,並且不記錄到日誌中  */ 
142.  if (!defined('INIT_NO_USERS')) 
143.  { 
144.  define('INIT_NO_USERS', true); 
145.  /* 整合UC後,如果是蜘蛛訪問,初始化UC需要的常量  */ 
146.  if($_CFG['integrate_code'] == 'ucenter') 
147.  { 
148.  $user = & init_users(); 
149.  } 
150.  } 
151.  $_SESSION = array(); 
152.  $_SESSION['user_id'] = 0; 
153.  $_SESSION['user_name'] = ''; 
154.  $_SESSION['email'] = ''; 
155.  $_SESSION['user_rank'] = 0; 
156.  $_SESSION['discount'] = 1.00; 
157.  } 
158.  
159.  if (!defined('INIT_NO_USERS')) 
160.  { 
161.  /* 初始化session */ 
162.  include(ROOT_PATH . 'includes/cls_session.php'); 
163.  
164.  $sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data')); 
165.  
166.  define('SESS_ID', $sess->get_session_id()); 
167.  } 
168.  
169.  if (!defined('INIT_NO_SMARTY')) 
170.  { 
171.  header('Cache-control: private'); 
172.  header('Content-type: text/html; charset='.EC_CHARSET); 
173.  
174.  /* 建立  Smarty 物件。*/ 
175.  require(ROOT_PATH . 'includes/cls_template.php'); 
176.  $smarty = new cls_template; 
177.  
178.  $smarty->cache_lifetime = $_CFG['cache_time']; 
179.  $smarty->template_dir = ROOT_PATH . 'themes/' . $_CFG['template']; 
180.  $smarty->cache_dir = ROOT_PATH . 'temp/caches'; 
181.  $smarty->compile_dir = ROOT_PATH . 'temp/compiled'; 
182.  
183.  // 判斷一下是否進行更新. 
184.  if ((DEBUG_MODE & 2) == 2) 
185.  { 
186.  $smarty->direct_output = true; 
187.  $smarty->force_compile = true; 
188.  } 
189.  else 
190.  { 
191.  $smarty->direct_output = false; 
192.  $smarty->force_compile = false; 
193.  } 
194.  
195.  // 熟悉的smarty的注入. 
196.  $smarty->assign('lang', $_LANG); 
197.  $smarty->assign('ecs_charset', EC_CHARSET); 
198.  // 設定CSS檔案. 
199.  if (!empty($_CFG['stylename'])) 
200.  { 
201.  $smarty->assign('ecs_css_path', 'themes/' . $_CFG['template'] . '/style_' . $_CFG['stylename'] . '.css'); 
202.  } 
203.  else 
204.  { 
205.  $smarty->assign('ecs_css_path', 'themes/' . $_CFG['template'] . '/style.css'); 
206.  } 
207.  
208.  } 
209.  
210.  if (!defined('INIT_NO_USERS')) 
211.  { 
212.  /* 會員資訊  */ 
213.  $user =& init_users(); 
214.  
215.  if (!isset($_SESSION['user_id'])) 
216.  { 
217.  /* 獲取投放站點的名稱  */ 
218.  $site_name = isset($_GET['from']) ? $_GET['from'] : addslashes($_LANG['self_site']); 
219.  $from_ad = !empty($_GET['ad_id']) ? intval($_GET['ad_id']) : 0; 
220.  
221.  $_SESSION['from_ad'] = $from_ad; //  使用者點選的廣告ID 
222.  $_SESSION['referer'] = stripslashes($site_name); //  使用者來源 
223.  
224.  unset($site_name); 
225.  
226.  if (!defined('INGORE_VISIT_STATS')) 
227.  { 
228.  visit_stats(); 
229.  } 
230.  } 
231.  
232.  if (empty($_SESSION['user_id'])) 
233.  { 
234.  if ($user->get_cookie()) 
235.  { 
236.  /* 如果會員已經登入並且還沒有獲得會員的帳戶餘額、積分以及優惠券  */ 
237.  if ($_SESSION['user_id'] > 0) 
238.  { 
239.  update_user_info(); 
240.  } 
241.  } 
242.  else 
243.  { 
244.  $_SESSION['user_id'] = 0; 
245.  $_SESSION['user_name'] = ''; 
246.  $_SESSION['email'] = ''; 
247.  $_SESSION['user_rank'] = 0; 
248.  $_SESSION['discount'] = 1.00; 
249.  if (!isset($_SESSION['login_fail'])) 
250.  { 
251.  $_SESSION['login_fail'] = 0; 
252.  } 
253.  } 
254.  } 
255.  
256.  /* 設定推薦會員  */ 
257.  if (isset($_GET['u'])) 
258.  { 
259.  set_affiliate(); 
260.  } 
261.  if (isset($smarty)) 
262.  { 
263.  $smarty->assign('ecs_session', $_SESSION); 
264.  } 
265.  } 
266.  // 修改報錯級別. 
267.  if ((DEBUG_MODE & 1) == 1) 
268.  { 
269.  error_reporting(E_ALL); 
270.  } 
271.  else 
272.  { 
273.  error_reporting(E_ALL ^ E_NOTICE); 
274.  } 
275.  if ((DEBUG_MODE & 4) == 4) 
276.  { 
277.  include(ROOT_PATH . 'includes/lib.debug.php'); 
278.  } 
279.  
280.  /* 判斷是否支援  Gzip 模式  */ 
281.  if (!defined('INIT_NO_SMARTY') && gzip_enabled()) 
282.  { 
283.  ob_start('ob_gzhandler'); 
284.  } 
285.  else 
286.  { 
287.  ob_start(); 
288.  } 
289.  
290.  ?>

相關文章