| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | 
							- <?php
 
- // +----------------------------------------------------------------------
 
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
 
- // +----------------------------------------------------------------------
 
- // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
 
- // +----------------------------------------------------------------------
 
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 
- // +----------------------------------------------------------------------
 
- // | Author: liu21st <liu21st@gmail.com>
 
- // +----------------------------------------------------------------------
 
- namespace Think;
 
- /**
 
-  * ThinkPHP 应用程序类 执行应用过程管理
 
-  */
 
- class App {
 
-     /**
 
-      * 应用程序初始化
 
-      * @access public
 
-      * @return void
 
-      */
 
-     static public function init() {
 
-         // 日志目录转换为绝对路径 默认情况下存储到公共模块下面
 
-         C('LOG_PATH',   realpath(LOG_PATH).'/Common/');
 
-         // 定义当前请求的系统常量
 
-         define('NOW_TIME',      $_SERVER['REQUEST_TIME']);
 
-         define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']);
 
-         define('IS_GET',        REQUEST_METHOD =='GET' ? true : false);
 
-         define('IS_POST',       REQUEST_METHOD =='POST' ? true : false);
 
-         define('IS_PUT',        REQUEST_METHOD =='PUT' ? true : false);
 
-         define('IS_DELETE',     REQUEST_METHOD =='DELETE' ? true : false);
 
-         // URL调度
 
-         Dispatcher::dispatch();
 
-         if(C('REQUEST_VARS_FILTER')){
 
- 			// 全局安全过滤
 
- 			array_walk_recursive($_GET,		'think_filter');
 
- 			array_walk_recursive($_POST,	'think_filter');
 
- 			array_walk_recursive($_REQUEST,	'think_filter');
 
- 		}
 
-         define('IS_AJAX',       ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
 
-         // TMPL_EXCEPTION_FILE 改为绝对地址
 
-         C('TMPL_EXCEPTION_FILE',realpath(C('TMPL_EXCEPTION_FILE')));
 
-         return ;
 
-     }
 
-     /**
 
-      * 执行应用程序
 
-      * @access public
 
-      * @return void
 
-      */
 
-     static public function exec() {
 
-     
 
-         if(!preg_match('/^[A-Za-z](\/|\w)*$/',CONTROLLER_NAME)){ // 安全检测
 
-             $module  =  false;
 
-         }else{
 
-             //创建控制器实例
 
-             $module  =  controller(CONTROLLER_NAME);                
 
-         }
 
-         if(!$module) {
 
-             // 是否定义Empty控制器
 
-             $module = A('Empty');
 
-             if(!$module){
 
-                 E(L('_CONTROLLER_NOT_EXIST_').':'.CONTROLLER_NAME);
 
-             }
 
-         }
 
-         // 获取当前操作名 支持动态路由
 
-         $action    =   ACTION_NAME.C('ACTION_SUFFIX');  
 
-         try{
 
-             if(!preg_match('/^[A-Za-z](\w)*$/',$action)){
 
-                 // 非法操作
 
-                 throw new \ReflectionException();
 
-             }
 
-             //执行当前操作
 
-             $method =   new \ReflectionMethod($module, $action);
 
-             if($method->isPublic() && !$method->isStatic()) {
 
-                 $class  =   new \ReflectionClass($module);
 
-                 // URL参数绑定检测
 
-                 if($method->getNumberOfParameters()>0 && C('URL_PARAMS_BIND')){
 
-                     switch($_SERVER['REQUEST_METHOD']) {
 
-                         case 'POST':
 
-                             $vars    =  array_merge($_GET,$_POST);
 
-                             break;
 
-                         case 'PUT':
 
-                             parse_str(file_get_contents('php://input'), $vars);
 
-                             break;
 
-                         default:
 
-                             $vars  =  $_GET;
 
-                     }
 
-                     $params =  $method->getParameters();
 
-                     $paramsBindType     =   C('URL_PARAMS_BIND_TYPE');
 
-                     foreach ($params as $param){
 
-                         $name = $param->getName();
 
-                         if( 1 == $paramsBindType && !empty($vars) ){
 
-                             $args[] =   array_shift($vars);
 
-                         }elseif( 0 == $paramsBindType && isset($vars[$name])){
 
-                             $args[] =   $vars[$name];
 
-                         }elseif($param->isDefaultValueAvailable()){
 
-                             $args[] =   $param->getDefaultValue();
 
-                         }else{
 
-                             E(L('_PARAM_ERROR_').':'.$name);
 
-                         }   
 
-                     }
 
-                     // 开启绑定参数过滤机制
 
-                     if(C('URL_PARAMS_SAFE')){
 
-                         $filters     =   C('URL_PARAMS_FILTER')?:C('DEFAULT_FILTER');
 
-                         if($filters) {
 
-                             $filters    =   explode(',',$filters);
 
-                             foreach($filters as $filter){
 
-                                 $args   =   array_map_recursive($filter,$args); // 参数过滤
 
-                             }
 
-                         }                        
 
-                     }
 
- 					array_walk_recursive($args,'think_filter');
 
-                     $method->invokeArgs($module,$args);
 
-                 }else{
 
-                     $method->invoke($module);
 
-                 }
 
-             }else{
 
-                 // 操作方法不是Public 抛出异常
 
-                 throw new \ReflectionException();
 
-             }
 
-         } catch (\ReflectionException $e) { 
 
-             // 方法调用发生异常后 引导到__call方法处理
 
-             $method = new \ReflectionMethod($module,'__call');
 
-             $method->invokeArgs($module,array($action,''));
 
-         }
 
-         return ;
 
-     }
 
-     /**
 
-      * 运行应用实例 入口文件使用的快捷方法
 
-      * @access public
 
-      * @return void
 
-      */
 
-     static public function run() {
 
-         App::init();
 
-         // Session初始化
 
-         if(!IS_CLI){
 
-             session(C('SESSION_OPTIONS'));
 
-         }
 
-         // 记录应用初始化时间
 
-         G('initTime');
 
-         App::exec();
 
-         return ;
 
-     }
 
- }
 
 
  |