UCenter Home代码分析之-核心文件common.php
Post by
yaohuaq
  2009-11-11 20:13:37 Wednesday Tags:UCH,代码,核心,php

最近因为业务需要,大概看了下UCH,想想也无事,就有了这。。。

打算做个UCH代码分析系列吧。

个人水平有限,如分析有不妥或者错漏,欢迎指正。

 

PHP代码
  1. <?php   
  2. /*  
  3.     [UCenter Home] (C) 2007-2008 Comsenz Inc.  
  4.     $Id: common.php 13217 2009-08-21 06:57:53Z liguode $  
  5. */  
  6.   
  7. /*  
  8. 分析者  C7_yaohuaq.      c7yaohuaq@126.com  
  9. 分析时间  2009-11-11.  
  10. 分析文件名:common.php  
  11. */  
  12.   
  13. /*  
  14. 定义一个入口,防止非法进入。也就是说另外一个页面必须引用common.php,才可以访问,如果直接在浏览器地址栏输入页面地址访问会失败。  
  15. 为什么要这么做?这么说吧,UCH里的一些页面,只需要在程序里引用即可,不想让外部用户访问。  
  16. */  
  17. @define('IN_UCHOME', TRUE);   
  18. /*  
  19. 是否开启D_BUG  
  20. */  
  21. define('D_BUG''0');   
  22. /*  
  23. 设定开启出错信息等级,详细的自己去查下error_reporting函数去。  
  24. */  
  25. D_BUG?error_reporting(7):error_reporting(0);   
  26. /*  
  27. 关闭自动转义  
  28. */  
  29. set_magic_quotes_runtime(0);   
  30. /*  
  31. 安全起见,变量初始化  
  32. */  
  33. $_SGLOBAL = $_SCONFIG = $_SBLOCK = $_TPL = $_SCOOKIE = $_SN = $space = array();   
  34.   
  35. //定义程序目录,绝对路径比相对路径要好,速度也要快。   
  36. define('S_ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);   
  37.   
  38. //基本文件   
  39. include_once(S_ROOT.'./ver.php');   
  40. /*  
  41. 如果没有配置文件,则转到安装页面  
  42. */  
  43. if(!@include_once(S_ROOT.'./config.php')) {   
  44.     header("Location: install/index.php");//安装   
  45.     exit();   
  46. }   
  47. /*  
  48. 引用基础函数文件  
  49. */  
  50. include_once(S_ROOT.'./source/function_common.php');   
  51.   
  52. //时间   
  53. $mtime = explode(' ', microtime());   
  54. /*  
  55. 讲一些常用的信息放到数组里是一个不错也常用的手法  
  56. 然后数组信息放到一个文本文件里,就不必每次都要查询数据库了,大大提高了速度和效率。  
  57. */  
  58. $_SGLOBAL['timestamp'] = $mtime[1];   
  59. $_SGLOBAL['supe_starttime'] = $_SGLOBAL['timestamp'] + $mtime[0];   
  60.   
  61. //GPC过滤   
  62. $magic_quote = get_magic_quotes_gpc();   
  63. /*  
  64. 如果开启转义,则用saddslashes这个函数进行对GET,POST过来的数据进行转义。  
  65. saddslashes函数 在function_common.php里。  
  66. */  
  67. if(emptyempty($magic_quote)) {   
  68.     $_GET = saddslashes($_GET);   
  69.     $_POST = saddslashes($_POST);   
  70. }   
  71.   
  72. //本站URL   
  73. if(emptyempty($_SC['siteurl'])) $_SC['siteurl'] = getsiteurl();   
  74.   
  75. //链接数据库   
  76. dbconnect();   
  77.   
  78. //缓存文件   
  79. /*  
  80. 打开data_config.php 你就知道$_SGLOBAL 原来是这样的。  
  81.  如果读取data_config.php失败,就包含function_cache.php文件,config_cache函数重新生成data_config.php缓存文件.  
  82. */  
  83. if(!@include_once(S_ROOT.'./data/data_config.php')) {   
  84.     include_once(S_ROOT.'./source/function_cache.php');   
  85.     config_cache();   
  86.     include_once(S_ROOT.'./data/data_config.php');   
  87. }   
  88. foreach (array('app''userapp''ad''magic'as $value) {   
  89.     @include_once(S_ROOT.'./data/data_'.$value.'.php');   
  90. }   
  91.   
  92. //COOKIE   
  93. /*  
  94. 对COOKIE进行处理,并放入$_SCOOKIE这个数组中  
  95. 注意$cookiepre,即COOKIE前缀。  
  96. 对本地的COOKIE前缀和服务器里设定的COOKIE前缀进行判断,相等才进行数据插入。  
  97. */  
  98. $prelength = strlen($_SC['cookiepre']);   
  99. foreach($_COOKIE as $key => $val) {   
  100.     if(substr($key, 0, $prelength) == $_SC['cookiepre']) {   
  101.         $_SCOOKIE[(substr($key$prelength))] = emptyempty($magic_quote) ? saddslashes($val) : $val;   
  102.     }   
  103. }   
  104.   
  105. //启用GIP   
  106. /*  
  107. 缓冲输出,如果开启了ob_gzhandler,数据压缩,减少用户下载数据的时间。  
  108. ob_start 自己去查手册。  
  109. */  
  110. if ($_SC['gzipcompress'] && function_exists('ob_gzhandler')) {   
  111.     ob_start('ob_gzhandler');   
  112. else {   
  113.     ob_start();   
  114. }   
  115.   
  116. //初始化一些常用数据咯...   
  117. $_SGLOBAL['supe_uid'] = 0;   
  118. $_SGLOBAL['supe_username'] = '';   
  119. $_SGLOBAL['inajax'] = emptyempty($_GET['inajax'])?0:intval($_GET['inajax']);   
  120. $_SGLOBAL['mobile'] = emptyempty($_GET['mobile'])?'':trim($_GET['mobile']);   
  121. $_SGLOBAL['ajaxmenuid'] = emptyempty($_GET['ajaxmenuid'])?'':$_GET['ajaxmenuid'];   
  122. $_SGLOBAL['refer'] = emptyempty($_SERVER['HTTP_REFERER'])?'':$_SERVER['HTTP_REFERER'];   
  123. if(emptyempty($_GET['m_timestamp']) || $_SGLOBAL['mobile'] != md5($_GET['m_timestamp']."\t".$_SCONFIG['sitekey'])) $_SGLOBAL['mobile'] = '';   
  124.   
  125. //登录注册防灌水机   
  126. if(emptyempty($_SCONFIG['login_action'])) $_SCONFIG['login_action'] = md5('login'.md5($_SCONFIG['sitekey']));   
  127. if(emptyempty($_SCONFIG['register_action'])) $_SCONFIG['register_action'] = md5('register'.md5($_SCONFIG['sitekey']));   
  128.   
  129. //整站风格,获取模板名,放入$_SCONFIG数组备用   
  130. if(emptyempty($_SCONFIG['template'])) {   
  131.     $_SCONFIG['template'] = 'default';   
  132. }   
  133. /*  
  134. 个人自定义风格处理,风格数据是放在COOKIE中的。  
  135. */  
  136. if($_SCOOKIE['mytemplate']) {   
  137.     $_SCOOKIE['mytemplate'] = str_replace('.','',trim($_SCOOKIE['mytemplate']));   
  138.     if(file_exists(S_ROOT.'./template/'.$_SCOOKIE['mytemplate'].'/style.css')) {   
  139.         $_SCONFIG['template'] = $_SCOOKIE['mytemplate'];   
  140.     } else {   
  141.         ssetcookie('mytemplate''', 365000);   
  142.     }   
  143. }   
  144.   
  145. //处理REQUEST_URI   
  146. if(!isset($_SERVER['REQUEST_URI'])) {     
  147.     $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];   
  148.     if(isset($_SERVER['QUERY_STRING'])) $_SERVER['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING'];   
  149. }   
  150. /*  
  151. 如果$_SERVER['REQUEST_URI']进行urldecode解码后如果发现有<和"字符,shtmlspecialchars处理GET的数据  
  152. 其实是防止跨站,什么是跨站自己百度下。  
  153. */  
  154. if($_SERVER['REQUEST_URI']) {   
  155.     $temp = urldecode($_SERVER['REQUEST_URI']);   
  156.     if(strexists($temp'<') || strexists($temp'"')) {   
  157.         $_GET = shtmlspecialchars($_GET);//XSS   
  158.     }   
  159. }   
  160.        
  161. //判断用户登录状态   
  162. checkauth();   
  163. /*  
  164. 将用户的UID和时间前7位MD5加密放入$_SGLOBAL中,是否登录判断和登陆超时判断  
  165. */  
  166. $_SGLOBAL['uhash'] = md5($_SGLOBAL['supe_uid']."\t".substr($_SGLOBAL['timestamp'], 0, 6));   
  167.   
  168. //用户菜单 function_common.php里   
  169. getuserapp();   
  170.   
  171. //处理UC应用   
  172. $_SCONFIG['uc_status'] = 0;   
  173. $_SGLOBAL['appmenus'] = $_SGLOBAL['appmenu'] = array();   
  174. /*  
  175. 对UC数据的一些处理 config.php里。  
  176. */  
  177. if($_SGLOBAL['app']) {   
  178.     foreach ($_SGLOBAL['app'as $appid => $value) {   
  179.         if(UC_APPID != $appid) {   
  180.             $_SCONFIG['uc_status'] = 1;   
  181.         }   
  182.         if($value['open']) {   
  183.             if(emptyempty($_SGLOBAL['appmenu'])) {   
  184.                 $_SGLOBAL['appmenu'] = $value;   
  185.             } else {   
  186.                 $_SGLOBAL['appmenus'][] = $value;   
  187.             }   
  188.         }   
  189.     }   
  190. }   
  191.   
  192. ?>  
评论:
发表评论:
姓名:
联系方法:(选填)
评论内容:
个人信息
迎接
昵称:C7_yaohuaq
QQ:88523499
Email:c77cc#vip.qq.com
居住地:北京 海淀
星座:天蝎
毕业院校:广西民族大学
工作点:喜讯无限