分享

ECSHOP代码详解之INIT.PHP

 zybzgc2bi0066d 2017-10-11
  1. <?php  
  2.   
  3. /** 
  4.  * ECSHOP 前台公用文件 
  5. */  
  6. //防止非法调用 defined-判断常量是否已定义,如果没返回false  
  7. if (!defined('IN_ECS'))  
  8. {  
  9.     die('Hacking attempt');//die-直接终止程序并输出  
  10. }  
  11. //报告所有错误  
  12. error_reporting(E_ALL);  
  13. //如果获取不到本文件  
  14. if (__FILE__ == '')  
  15. {  
  16.     die('Fatal error code: 0');  
  17. }  
  18. /*预定义常量 
  19. __LINE__       文件中的当前行号。 
  20. __FILE__       文件的完整路径和文件名。 
  21. __FUNCTION__   函数名称(这是 PHP 4.3.0 新加的)。 
  22. __CLASS__      类的名称(这是 PHP 4.3.0 新加的)。 
  23. __METHOD__     类的方法名(这是 PHP 5.0.0 新加的)。 
  24. */  
  25. /* 取得当前商城所在的根目录 */  
  26. define('ROOT_PATH'str_replace('includes/init.php'''str_replace('\\', '/', __FILE__)));  
  27. //检测是否已安装  
  28. if (!file_exists(ROOT_PATH . 'data/install.lock') && !file_exists(ROOT_PATH . 'includes/install.lock')  
  29.     && !defined('NO_CHECK_INSTALL'))  
  30. {  
  31.     header("Location: ./install/index.php\n");  
  32.   
  33.     exit;  
  34. }  
  35.   
  36. /* 初始化设置 */  
  37. @ini_set('memory_limit',          '64M');//ini_set设置php.ini中的设置,memory_limit设定一个脚本所能够申请到的最大内存字节数  
  38. @ini_set('session.cache_expire',  180);//指定会话页面在客户端cache中的有效期限(分钟),单位为分钟。  
  39. @ini_set('session.use_trans_sid', 0);//关闭自动把session id嵌入到web的URL中  
  40. @ini_set('session.use_cookies',   1);//允许使用cookie在客户端保存会话ID  
  41. @ini_set('session.auto_start',    0);//在客户访问任何页面时都自动初始化会话,0-禁止  
  42. @ini_set('display_errors',        1);//是否显示错误  
  43.   
  44. if (DIRECTORY_SEPARATOR == '\\')//如果装在windows上(DIRECTORY_SEPARATOR路径分隔符,linux上就是’/’   windows上是’\’)  
  45. {  
  46.     @ini_set('include_path''.;' . ROOT_PATH);//include目录为当前目录和网站根目录,windows下用';'分隔  
  47. }  
  48. else  
  49. {  
  50.     @ini_set('include_path''.:' . ROOT_PATH);//include目录为当前目录和网站根目录,linux下用':'分隔  
  51. }  
  52.   
  53. require(ROOT_PATH . 'data/config.php');//包含配置文件(数据库相关)  
  54.   
  55. if (defined('DEBUG_MODE') == false)//如果常量DEBUG_MODE没有定义则定义为0,DEBUG_MODE用于设置ecshp的使用模式  
  56. {  
  57.     define('DEBUG_MODE', 0);  
  58. }  
  59. //设定用于所有日期时间函数的默认时区  
  60. if (PHP_VERSION >= '5.1' && !empty($timezone))  
  61. {  
  62.     date_default_timezone_set($timezone);//date_default_timezone_set 设置时区  
  63. }  
  64. //$_SERVER['PHP_SELF']返回当前页面,获取$_SERVER['PHP_SELF']最好用htmlspecialchars过滤一下,存在XSS漏洞  
  65. $php_self = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];  
  66. if ('/' == substr($php_self, -1))//如果是"/"结尾,则加上index.php  
  67. {  
  68.     $php_self .= 'index.php';  
  69. }  
  70. define('PHP_SELF'$php_self);//放入常量  
  71.   
  72. require(ROOT_PATH . 'includes/inc_constant.php');//包含预定义常量文件  
  73. require(ROOT_PATH . 'includes/cls_ecshop.php');//基础类 文件  
  74. require(ROOT_PATH . 'includes/cls_error.php');//错误类 文件  
  75. require(ROOT_PATH . 'includes/lib_time.php');//时间函数  
  76. require(ROOT_PATH . 'includes/lib_base.php');//基础函数库  
  77. require(ROOT_PATH . 'includes/lib_common.php');//基础函数库  
  78. require(ROOT_PATH . 'includes/lib_main.php');//公用函数库  
  79. require(ROOT_PATH . 'includes/lib_insert.php');//动态内容函数库  
  80. require(ROOT_PATH . 'includes/lib_goods.php');//商品相关函数库  
  81. require(ROOT_PATH . 'includes/lib_article.php');//文章及文章分类相关函数库  
  82.   
  83. /* 对用户传入的变量进行转义操作。*/  
  84. if (!get_magic_quotes_gpc())  
  85. {  
  86.     if (!empty($_GET))  
  87.     {  
  88.         $_GET  = addslashes_deep($_GET);  
  89.     }  
  90.     if (!empty($_POST))  
  91.     {  
  92.         $_POST = addslashes_deep($_POST);  
  93.     }  
  94.   
  95.     $_COOKIE   = addslashes_deep($_COOKIE);  
  96.     $_REQUEST  = addslashes_deep($_REQUEST);  
  97. }  
  98.   
  99. /* 创建 ECSHOP 对象 */  
  100. $ecs = new ECS($db_name$prefix);//参数说明:数据库名 表前缀  
  101. define('DATA_DIR'$ecs->data_dir());//数据目录  
  102. define('IMAGE_DIR'$ecs->image_dir());//图片目录  
  103.   
  104. /* 初始化数据库类 */  
  105. require(ROOT_PATH . 'includes/cls_mysql.php');   
  106. $db = new cls_mysql($db_host$db_user$db_pass$db_name);  
  107. /* 设置不允许进行缓存的表 */  
  108. $db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart')));  
  109. $db_host = $db_user = $db_pass = $db_name = NULL;  
  110.   
  111. /* 创建错误处理对象 */  
  112. $err = new ecs_error('message.dwt');  
  113.   
  114. /* 载入系统参数 */  
  115. $_CFG = load_config(); //载入配置信息函数在lib_common.php  
  116.   
  117. /* 载入语言文件 */  
  118. require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php');  
  119.   
  120. if ($_CFG['shop_closed'] == 1)  
  121. {  
  122.     /* 商店关闭了,输出关闭的消息 */  
  123.     header('Content-type: text/html; charset='.EC_CHARSET);  
  124.   
  125.     die('<div style="margin: 150px; text-align: center; font-size: 14px"><p>' . $_LANG['shop_closed'] . '</p><p>' . $_CFG['close_comment'] . '</p></div>');  
  126. }  
  127.   
  128. //判断是否为搜索引擎蜘蛛  函数在lib_main.php  
  129. if (is_spider())  
  130. {  
  131.     /* 如果是蜘蛛的访问,那么默认为访客方式,并且不记录到日志中 */  
  132.     if (!defined('INIT_NO_USERS'))  
  133.     {  
  134.         define('INIT_NO_USERS', true);  
  135.         /* 整合UC后,如果是蜘蛛访问,初始化UC需要的常量 */  
  136.         if($_CFG['integrate_code'] == 'ucenter')  
  137.         {  
  138.              $user = & init_users();  
  139.         }  
  140.     }  
  141.     $_SESSION = array();  
  142.     $_SESSION['user_id']     = 0;  
  143.     $_SESSION['user_name']   = '';  
  144.     $_SESSION['email']       = '';  
  145.     $_SESSION['user_rank']   = 0;  
  146.     $_SESSION['discount']    = 1.00;  
  147. }  
  148. //非搜索引擎蜘蛛,记录session  
  149. if (!defined('INIT_NO_USERS'))  
  150. {  
  151.     /* 初始化session */  
  152.     include(ROOT_PATH . 'includes/cls_session.php');  
  153.   
  154.     $sess = new cls_session($db$ecs->table('sessions'), $ecs->table('sessions_data'));  
  155.   
  156.     define('SESS_ID'$sess->get_session_id());  
  157. }  
  158. //如果使用Smarty  
  159. if (!defined('INIT_NO_SMARTY'))  
  160. {  
  161.     header('Cache-control: private');  
  162.     header('Content-type: text/html; charset='.EC_CHARSET);  
  163.   
  164.     /* 创建 Smarty 对象。*/  
  165.     require(ROOT_PATH . 'includes/cls_template.php');  
  166.     $smarty = new cls_template;  
  167.   
  168.     $smarty->cache_lifetime = $_CFG['cache_time'];//缓存时间  
  169.     $smarty->template_dir   = ROOT_PATH . 'themes/' . $_CFG['template'];//模板所在  
  170.     $smarty->cache_dir      = ROOT_PATH . 'temp/caches';//缓存所在  
  171.     $smarty->compile_dir    = ROOT_PATH . 'temp/compiled';//模板编译后的文件所在  
  172.   
  173.     if ((DEBUG_MODE & 2) == 2)//如果常量DEBUG_MODE值为 2、3、6、7.时  
  174.     {  
  175.         $smarty->direct_output = true; //不使用缓存直接输出  
  176.         $smarty->force_compile = true; //强行编译  
  177.     }  
  178.     else  
  179.     {  
  180.         $smarty->direct_output = false;  
  181.         $smarty->force_compile = false;  
  182.     }  
  183.   
  184.     $smarty->assign('lang'$_LANG);  
  185.     $smarty->assign('ecs_charset', EC_CHARSET);  
  186.     if (!empty($_CFG['stylename']))//如果自己定义样式文件就用自己的  
  187.     {  
  188.         $smarty->assign('ecs_css_path''themes/' . $_CFG['template'] . '/style_' . $_CFG['stylename'] . '.css');  
  189.     }  
  190.     else  
  191.     {  
  192.         $smarty->assign('ecs_css_path''themes/' . $_CFG['template'] . '/style.css');  
  193.     }  
  194.   
  195. }  
  196. //非搜索引擎爬虫,记录用户信息  
  197. if (!defined('INIT_NO_USERS'))  
  198. {  
  199.     /* 会员信息  初始化会员数据 lib_common.php */   
  200.     $user =& init_users();  
  201.   
  202.     if (!isset($_SESSION['user_id']))  
  203.     {  
  204.         /* 获取投放站点的名称 */  
  205.         $site_name = isset($_GET['from'])   ? $_GET['from'] : addslashes($_LANG['self_site']);  
  206.         $from_ad   = !empty($_GET['ad_id']) ? intval($_GET['ad_id']) : 0;  
  207.   
  208.         $_SESSION['from_ad'] = $from_ad// 用户点击的广告ID  
  209.         $_SESSION['referer'] = stripslashes($site_name); // 用户来源  
  210.   
  211.         unset($site_name);  
  212.   
  213.         if (!defined('INGORE_VISIT_STATS'))  
  214.         {  
  215.             visit_stats();  
  216.         }  
  217.     }  
  218.   
  219.     if (empty($_SESSION['user_id']))  
  220.     {  
  221.         if ($user->get_cookie())  
  222.         {  
  223.             /* 如果会员已经登录并且还没有获得会员的帐户余额、积分以及优惠券 */  
  224.             if ($_SESSION['user_id'] > 0)  
  225.             {  
  226.                 update_user_info();  
  227.             }  
  228.         }  
  229.         else  
  230.         {  
  231.             $_SESSION['user_id']     = 0;  
  232.             $_SESSION['user_name']   = '';  
  233.             $_SESSION['email']       = '';  
  234.             $_SESSION['user_rank']   = 0;  
  235.             $_SESSION['discount']    = 1.00;  
  236.             if (!isset($_SESSION['login_fail']))  
  237.             {  
  238.                 $_SESSION['login_fail'] = 0;  
  239.             }  
  240.         }  
  241.     }  
  242.   
  243.     /* 设置推荐会员 */  
  244.     if (isset($_GET['u']))  
  245.     {  
  246.         set_affiliate();  
  247.     }  
  248.     if (isset($smarty))  
  249.     {  
  250.         $smarty->assign('ecs_session'$_SESSION);  
  251.     }  
  252. }  
  253.   
  254. if ((DEBUG_MODE & 1) == 1)//如果常量DEBUG_MODE值为 1、3、5、7.时  
  255. {  
  256.     error_reporting(E_ALL);//报告全部错误  
  257. }  
  258. else  
  259. {  
  260.     error_reporting(E_ALL ^ E_NOTICE); //报告除E_NOTICE以外的所有错误  
  261. }  
  262. if ((DEBUG_MODE & 4) == 4)//如果常量DEBUG_MODE值为 4、5、6、7.时,调试程序  
  263. {  
  264.     include(ROOT_PATH . 'includes/lib.debug.php');//  
  265. }  
  266.   
  267. /* 判断是否支持 Gzip 模式  如果使用SMARTY同时设置了网页压缩,则启用压缩 */  
  268. if (!defined('INIT_NO_SMARTY') && gzip_enabled())  
  269. {  
  270.     ob_start('ob_gzhandler');//压缩后放入缓冲区  
  271. }  
  272. else  
  273. {  
  274.     ob_start();//打开缓冲区,把下面要显示的内容先缓在服务器  
  275. }  
  276. /* 
  277. ob_start相关函数了解: 
  278. 1、Flush:刷新缓冲区的内容,输出。 
  279. 函数格式:flush() 
  280. 说明:这个函数经常使用,效率很高。 
  281. 2、ob_start :打开输出缓冲区 
  282. 函数格式:void ob_start(void) 
  283. 说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。 
  284. 、ob_get_contents :返回内部缓冲区的内容。 
  285. 使用方法:string ob_get_contents(void) 
  286. 说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。 
  287. 4、ob_get_length:返回内部缓冲区的长度。 
  288. 使用方法:int ob_get_length(void) 
  289. 说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。 
  290. 5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。 
  291. 使用方法:void ob_end_flush(void) 
  292. 说明:这个函数发送输出缓冲区的内容(如果有的话)。 
  293. 6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区 
  294. 使用方法:void ob_end_clean(void) 
  295. 说明:这个函数不会输出内部缓冲区的内容而是把它删除! 
  296. 7、ob_implicit_flush:打开或关闭绝对刷新 
  297. 使用方法:void ob_implicit_flush ([int flag]) 
  298. 说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush() 
  299. */  
  300. ?>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多