Example #1
0
 public function cat($file, \Response $oReponse = null)
 {
     $query_string = http_build_query(array());
     // récuperation de la requete
     require_once __DIR__ . "/Request.php";
     $oRequest = new Request();
     // lance la requete
     $response = $oRequest->send(array('verb' => 'GET', 'resource' => '/' . $this->_bucket . '/' . urlencode($file) . '?' . $query_string), $this->_auth);
     // vérification du code de retour
     if ($oRequest->info('http_code') !== 200) {
         // ouverture du flux xml
         require_once __DIR__ . "/XMLElement.php";
         throw new Client_Exception(new XMLElement($response), $oRequest);
     }
     // lecture du flux
     if ($oReponse !== null) {
         $oReponse->appendBody($response);
         $oReponse->type($oRequest->info('content_type'));
         // ajout des headers pour le validator HTTP
         $aHeaders = $oRequest->info('headers');
         $oReponse->header("ETag", $aHeaders['ETag']);
         $oReponse->header("Last-Modified", $aHeaders['Last-Modified']);
     }
     return $response;
 }
Example #2
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 注册错误和异常处理机制 以及初始化配置
     register_shutdown_function('\\think\\Error::appShutdown');
     set_error_handler('\\think\\Error::appError');
     set_exception_handler('\\think\\Error::appException');
     Config::load(THINK_PATH . 'config' . EXT);
     // 初始化应用(公共模块) 初始化变量配置
     self::initModule(COMMON_MODULE, Config::get());
     // 获取配置参数
     $config = Config::get();
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 记录路由信息
     APP_DEBUG && Log::record('[ ROUTE ] ' . var_export(self::$dispatch, true), 'info');
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['module'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             //$data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']);
             break;
         case 'function':
             // 规则闭包
             $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }
Example #3
0
 public static function viaJavaScript($url, $parent = false)
 {
     if ($link = Filter::with('core.redirect', $url)) {
         Response::type('text/html');
         Response::add('<script>' . ($parent ? 'parent.' : '') . 'location.href="', addslashes($link), '"</script>');
         Response::send();
         exit;
     }
 }
Example #4
0
 public static function set($type, $response)
 {
     if (!in_array($type, self::$response_types)) {
         echo "Invalid Response Type";
         return false;
     }
     self::$type = $type;
     self::$response = $response;
     return array(self::$type => self::$response);
 }
 /**
  * Inject the script with the cookie warning
  *
  * @param Response $response : Response
  * @return void
  */
 protected function _injectCookieAdvert($response)
 {
     if (strpos($response->type(), 'html') === false) {
         return;
     }
     $body = $response->body();
     $pos = strrpos($body, '</body>');
     if ($pos === false) {
         return;
     }
     $view = "<iframe src='" . Router::url('/cookie_warning/cookie-warnings/display-info') . "' style='width:100%;position:fixed;top:0;left: 0;z-index:9999' id='cookie_iframe'></iframe>";
     $body = substr($body, 0, $pos) . $view . substr($body, $pos);
     $response->body($body);
 }
Example #6
0
File: app.php Project: xl602/think
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化公共模块
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $file) {
             Config::load($file, $file);
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 日志初始化
     Log::init($config['log']);
     // 缓存初始化
     Cache::connect($config['cache']);
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     // 应用URL调度
     self::dispatch($config);
     // 监听app_run
     APP_HOOK && Hook::listen('app_run');
     // 执行操作
     if (!preg_match('/^[A-Za-z](\\/|\\.|\\w)*$/', CONTROLLER_NAME)) {
         // 安全检测
         throw new Exception('illegal controller name:' . CONTROLLER_NAME, 10000);
     }
     if (Config::get('action_bind_class')) {
         $class = self::bindActionClass(Config::get('empty_controller'));
         $instance = new $class();
         // 操作绑定到类后 固定执行run入口
         $action = 'run';
     } else {
         $instance = Loader::controller(CONTROLLER_NAME, '', Config::get('empty_controller'));
         // 获取当前操作名
         $action = ACTION_NAME . Config::get('action_suffix');
     }
     if (!$instance) {
         throw new Exception('class [ ' . Loader::parseClass(MODULE_NAME, CONTROLLER_LAYER, CONTROLLER_NAME) . ' ] not exists', 10001);
     }
     try {
         // 操作方法开始监听
         $call = [$instance, $action];
         APP_HOOK && Hook::listen('action_begin', $call);
         if (!preg_match('/^[A-Za-z](\\w)*$/', $action)) {
             // 非法操作
             throw new \ReflectionException();
         }
         //执行当前操作
         $method = new \ReflectionMethod($instance, $action);
         if ($method->isPublic()) {
             // URL参数绑定检测
             if (Config::get('url_params_bind') && $method->getNumberOfParameters() > 0) {
                 // 获取绑定参数
                 $args = self::getBindParams($method, Config::get('url_parmas_bind_type'));
                 // 全局过滤
                 array_walk_recursive($args, 'think\\Input::filterExp');
                 $data = $method->invokeArgs($instance, $args);
             } else {
                 $data = $method->invoke($instance);
             }
             // 操作方法执行完成监听
             APP_HOOK && Hook::listen('action_end', $data);
             // 输出数据
             return Response::send($data, Response::type(), Config::get('response_return'));
         } else {
             // 操作方法不是Public 抛出异常
             throw new \ReflectionException();
         }
     } catch (\ReflectionException $e) {
         // 操作不存在
         if (method_exists($instance, '_empty')) {
             $method = new \ReflectionMethod($instance, '_empty');
             $data = $method->invokeArgs($instance, [$action, '']);
             // 操作方法执行完成监听
             APP_HOOK && Hook::listen('action_end', $data);
             // 输出数据
             return Response::send($data, Response::type(), Config::get('response_return'));
         } else {
             throw new Exception('method [ ' . (new \ReflectionClass($instance))->getName() . '->' . $action . ' ] not exists ', 10002);
         }
     }
 }
Example #7
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $name => $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             Config::load($file, is_string($name) ? $name : pathinfo($file, PATHINFO_FILENAME));
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
         if (!APP_MULTI_MODULE) {
             Lang::load(APP_PATH . 'lang' . DS . LANG_SET . EXT);
         }
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['module'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']);
             break;
         case 'function':
             // 规则闭包
             $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }
Example #8
0
 /**
  * 解析和获取模板内容 用于输出
  * @access public
  *
  * @param string $template 模板文件名或者内容
  * @param array  $vars     模板输出变量
  * @param array  $config     模板参数
  * @param bool   $renderContent 是否渲染内容
  *
  * @return string
  * @throws Exception
  */
 public function fetch($template = '', $vars = [], $config = [], $renderContent = false)
 {
     // 模板变量
     $vars = $vars ? $vars : $this->data;
     if (!$renderContent) {
         // 获取模板文件名
         $template = $this->parseTemplate($template);
         // 开启调试模式Win环境严格区分大小写
         // 模板不存在 抛出异常
         if (!is_file($template) || APP_DEBUG && IS_WIN && realpath($template) != $template) {
             throw new Exception('template file not exists:' . $template, 10700);
         }
         // 记录视图信息
         APP_DEBUG && Log::record('[ VIEW ] ' . $template . ' [ ' . var_export($vars, true) . ' ]', 'info');
     }
     // 页面缓存
     ob_start();
     ob_implicit_flush(0);
     if ('php' == $this->engine || empty($this->engine)) {
         // 原生PHP解析
         extract($vars, EXTR_OVERWRITE);
         is_file($template) ? include $template : eval('?>' . $template);
     } else {
         // 指定模板引擎
         $this->engine->fetch($template, $vars, $config);
     }
     // 获取并清空缓存
     $content = ob_get_clean();
     // 内容过滤标签
     APP_HOOK && Hook::listen('view_filter', $content);
     // 允许用户自定义模板的字符串替换
     if (!empty($this->config['parse_str'])) {
         $replace = $this->config['parse_str'];
         $content = str_replace(array_keys($replace), array_values($replace), $content);
     }
     if (!Config::get('response_auto_output')) {
         // 自动响应输出
         return Response::send($content, Response::type());
     }
     return $content;
 }
Example #9
0
File: App.php Project: cnzin/think
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 获取配置参数
     $config = Config::get();
     // 注册根命名空间
     if (!empty($config['root_namespace'])) {
         Loader::addNamespace($config['root_namespace']);
     }
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
         if (!APP_MULTI_MODULE) {
             Lang::load(APP_PATH . 'lang' . DS . LANG_SET . EXT);
         }
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 记录路由信息
     APP_DEBUG && Log::record('[ ROUTE ] ' . var_export(self::$dispatch, true), 'info');
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['module'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'method':
             // 执行回调方法
             $data = self::invokeMethod(self::$dispatch['method'], self::$dispatch['params']);
             break;
         case 'function':
             // 规则闭包
             $data = self::invokeFunction(self::$dispatch['function'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     if (Config::get('response_auto_output')) {
         // 自动响应输出
         return Response::send($data, Response::type(), Config::get('response_return'));
     }
 }
Example #10
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $file) {
             Config::load($file, $file);
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 日志初始化
     Log::init($config['log']);
     // 缓存初始化
     Cache::connect($config['cache']);
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     // URL路由检测
     $dispatch = self::route($config);
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin', $dispatch);
     // 根据类型调度
     switch ($dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . $dispatch['url'], true, $dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module($dispatch['data'], $config);
             break;
         case 'action':
             // 执行操作
             $data = Loader::action($dispatch['action'], $dispatch['params']);
             break;
         case 'behavior':
             // 执行行为
             $data = Hook::exec($dispatch['class'], $dispatch['method'], $dispatch['params']);
             break;
         case 'regex_closure':
             // 正则闭包
             $data = self::invokeRegex($dispatch['closure'], $dispatch['params']);
             break;
         case 'rule_closure':
             // 规则闭包
             $data = self::invokeRule($dispatch['closure'], $dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }
Example #11
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run()
 {
     // 初始化应用(公共模块)
     self::initModule(COMMON_MODULE, Config::get());
     // 读取扩展配置文件
     if (Config::get('extra_config_list')) {
         foreach (Config::get('extra_config_list') as $file) {
             Config::load($file, $file);
         }
     }
     // 获取配置参数
     $config = Config::get();
     // 加载额外文件
     if (!empty($config['extra_file_list'])) {
         foreach ($config['extra_file_list'] as $file) {
             $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
             if (is_file($file)) {
                 include_once $file;
             }
         }
     }
     // 日志初始化
     Log::init($config['log']);
     // 缓存初始化
     Cache::connect($config['cache']);
     // 设置系统时区
     date_default_timezone_set($config['default_timezone']);
     // 监听app_init
     APP_HOOK && Hook::listen('app_init');
     // 开启多语言机制
     if ($config['lang_switch_on']) {
         // 获取当前语言
         defined('LANG_SET') or define('LANG_SET', Lang::range());
         // 加载系统语言包
         Lang::load(THINK_PATH . 'lang' . DS . LANG_SET . EXT);
     }
     // 启动session CLI 不开启
     if (!IS_CLI && $config['use_session']) {
         Session::init($config['session']);
     }
     if (empty(self::$dispatch['type'])) {
         // 未指定调度类型 则进行URL路由检测
         self::route($config);
     }
     // 监听app_begin
     APP_HOOK && Hook::listen('app_begin');
     // 根据类型调度
     switch (self::$dispatch['type']) {
         case 'redirect':
             // 执行重定向跳转
             header('Location: ' . self::$dispatch['url'], true, self::$dispatch['status']);
             break;
         case 'module':
             // 模块/控制器/操作
             $data = self::module(self::$dispatch['data'], $config);
             break;
         case 'controller':
             // 执行控制器操作
             $data = Loader::action(self::$dispatch['controller'], self::$dispatch['params']);
             break;
         case 'callable':
             // 执行回调方法
             $callable = self::$dispatch['callable'];
             if (is_callable($callable)) {
                 $data = is_array($callable) ? self::reflectionInvoke(new $callable[0](), $callable[1]) : call_user_func_array($callable, self::$dispatch['params']);
                 // 静态方法或者函数
             } else {
                 throw new Exception('not callable : ' . (is_array($callable) ? implode('->', $callable) : $callable), 10009);
             }
             break;
         case 'closure':
             // 规则闭包
             $data = self::invoke(self::$dispatch['closure'], self::$dispatch['params']);
             break;
         default:
             throw new Exception('dispatch type not support', 10008);
     }
     // 监听app_end
     APP_HOOK && Hook::listen('app_end', $data);
     // 输出数据到客户端
     return Response::send($data, Response::type(), Config::get('response_return'));
 }
Example #12
0
 public static function viaJavaScript($url, $parent = false)
 {
     Response::type('text/html');
     Response::text('<script>' . ($parent ? 'parent.' : '') . 'location.href="', addslashes($url), '"</script>');
 }
Example #13
0
 /**
  * Run one of the mapped callbacks to a passed HTTP Method.
  * @param  array  $args The arguments to be passed to the callback
  * @param  string $method The HTTP Method requested.
  * @return array The callback response.
  */
 public function run(array $args, $method = 'get')
 {
     $method = strtolower($method);
     $append_echoed_text = Options::get('core.route.append_echoed_text', true);
     static::trigger('start', $this, $args, $method);
     // Call direct befores
     if ($this->befores) {
         // Reverse befores order
         foreach (array_reverse($this->befores) as $mw) {
             static::trigger('before', $this, $mw);
             Event::trigger('core.route.before', $this, $mw);
             ob_start();
             $mw_result = call_user_func($mw);
             $raw_echoed = ob_get_clean();
             if ($append_echoed_text) {
                 Response::add($raw_echoed);
             }
             if (false === $mw_result) {
                 return [''];
             } else {
                 Response::add($mw_result);
             }
         }
     }
     $callback = is_array($this->callback) && isset($this->callback[$method]) ? $this->callback[$method] : $this->callback;
     if (is_callable($callback) || is_a($callback, "View")) {
         Response::type(Options::get('core.route.response_default_type', Response::TYPE_HTML));
         ob_start();
         if (is_a($callback, "View")) {
             // Get the rendered view
             $view_results = (string) $callback;
         } else {
             $view_results = call_user_func_array($callback, $args);
         }
         $raw_echoed = ob_get_clean();
         if ($append_echoed_text) {
             Response::add($raw_echoed);
         }
         Response::add($view_results);
     }
     // Apply afters
     if ($this->afters) {
         foreach ($this->afters as $mw) {
             static::trigger('after', $this, $mw);
             Event::trigger('core.route.after', $this, $mw);
             ob_start();
             $mw_result = call_user_func($mw);
             $raw_echoed = ob_get_clean();
             if ($append_echoed_text) {
                 Response::add($raw_echoed);
             }
             if (false === $mw_result) {
                 return [''];
             } else {
                 Response::add($mw_result);
             }
         }
     }
     static::trigger('end', $this, $args, $method);
     Event::trigger('core.route.end', $this);
     return [Filter::with('core.route.response', Response::body())];
 }