Пример #1
0
 public static function route()
 {
     $action = Config::get('ctrl_path', 'ctrl') . '\\' . Request::getCtrl();
     $view = null;
     try {
         $class = Factory::getInstance($action);
         if (!$class instanceof IController) {
             throw new \Exception("ctrl error");
         } else {
             $class->_before();
             $method = Request::getMethod();
             if (!method_exists($class, $method)) {
                 throw new \Exception("method error");
             }
             $view = $class->{$method}();
             $class->_after();
             if (null === $view) {
                 return null;
             }
             return Response::display($view);
         }
     } catch (\Exception $e) {
         if (Request::isLongServer()) {
             return \call_user_func(Config::getField('project', 'exception_handler', 'ZPHP\\ZPHP::exceptionHandler'), $e);
         }
         throw $e;
     }
 }
Пример #2
0
 public function onRequest($request, $response)
 {
     $filename = ZPHP::getRootPath() . DS . 'webroot' . $request->server['path_info'];
     if (is_file($filename)) {
         //解析静态文件
         $response->header("Content-Type", $this->getMime($filename) . '; charset=utf-8');
         $response->end(file_get_contents($filename));
         return;
     }
     $param = [];
     if (!empty($request->get)) {
         $param = $request->get;
     }
     if (!empty($request->post)) {
         $param += $request->post;
     }
     $_SERVER['HTTP_USER_AGENT'] = $request->header['user-agent'];
     Request::parse($param);
     Request::setViewMode('Php');
     Request::setHttpServer(1);
     Response::setResponse($response);
     try {
         $result = ZRoute::route();
     } catch (\Exception $e) {
         $model = Formater::exception($e);
         $model['_view_mode'] = 'Json';
         $result = Response::display($model);
     }
     $response->end($result);
     Request::setViewMode(ZConfig::getField('project', 'view_mode', 'Json'));
     Request::setHttpServer(0);
 }
Пример #3
0
 public function display()
 {
     if (Request::isHttp()) {
         Response::header("Content-Type", "text/xml; charset=utf-8");
     }
     $data = $this->xmlEncode();
     if (Request::isLongServer()) {
         return $data;
     }
     echo $data;
     return null;
 }
Пример #4
0
 public function display()
 {
     if (Request::isHttp()) {
         Response::header('Content-Type', 'application/amf; charset=utf-8');
     }
     $data = \amf3_encode($this->model);
     if (Request::isLongServer()) {
         return $data;
     }
     echo $data;
     return null;
 }
Пример #5
0
 public function display()
 {
     $pack = new MessagePacker();
     $pack->writeString(json_encode($this->model));
     if (Request::isHttp()) {
         Response::header("Content-Type", "application/zpack; charset=utf-8");
     }
     if (Request::isLongServer()) {
         return array($this->model, $pack->getData());
     }
     echo $pack->getData();
     return null;
 }
Пример #6
0
 public static function start($sessionType, $config)
 {
     if (null !== self::$_sid) {
         return;
     }
     //判断参数里是否有sessid
     if (empty($config)) {
         $config = ZConfig::get('session');
     }
     if (!empty($config['adapter'])) {
         $sessionType = $config['adapter'];
     }
     self::$_config = $config;
     self::$_sessionType = $sessionType;
     $request = Request::getRequest();
     $sessionName = empty($config['session_name']) ? 'ZPHPSESSID' : $config['session_name'];
     $sid = null;
     if (!empty($request->cookie[$sessionName])) {
         $sid = $request->cookie[$sessionName];
     }
     if (!$sid && !empty($request->get[$sessionName])) {
         $sid = $request->get[$sessionName];
     }
     if (!$sid && !empty($request->post[$sessionName])) {
         $sid = $request->post[$sessionName];
     }
     if ($sid) {
         $handler = Factory::getInstance($sessionType, $config);
         $data = $handler->read($sid);
         if (!empty($data)) {
             $_SESSION = unserialize($data);
         } else {
             $_SESSION = array();
         }
     } else {
         $sid = sha1($request->header['user-agent'] . $request->server['remote_addr'] . uniqid(Request::getSocket()->worker_pid . '_'));
         $path = empty($config['path']) ? '/' : $config['path'];
         $domain = empty($config['domain']) ? '' : $config['domain'];
         $secure = empty($config['secure']) ? false : $config['secure'];
         $httponly = !isset($config['httponly']) ? true : $config['httponly'];
         $lifetime = 0;
         if (!empty($config['cache_expire'])) {
             $lifetime = time() + $config['cache_expire'] * 60;
         }
         Response::getResponse()->cookie($sessionName, $sid, $lifetime, $path, $domain, $secure, $httponly);
         $_SESSION = array();
     }
     self::$_sid = $sid;
 }
Пример #7
0
 public function display()
 {
     if (Request::isHttp()) {
         Response::header("Content-Type", "text/plain; charset=utf-8");
     }
     if (\is_string($this->model)) {
         $data = $this->model;
     } else {
         $data = json_encode($this->model);
     }
     if (Request::isLongServer()) {
         return $data;
     }
     echo $data;
     return null;
 }
Пример #8
0
 public function display()
 {
     if (Request::isHttp()) {
         $params = Request::getParams();
         if (isset($params['jsoncallback'])) {
             Response::header("Content-Type", 'application/x-javascript; charset=utf-8');
         } else {
             Response::header("Content-Type", "application/json; charset=utf-8");
         }
     }
     $data = \json_encode($this->model);
     if (Request::isLongServer()) {
         return $data;
     }
     echo $data;
     return null;
 }
Пример #9
0
 public function display()
 {
     $data = \json_encode($this->model, JSON_UNESCAPED_UNICODE);
     if (Request::isHttp()) {
         $params = Request::getParams();
         $key = Config::getField('project', 'jsonp', 'jsoncallback');
         if (isset($params[$key])) {
             Response::header("Content-Type", 'application/x-javascript; charset=utf-8');
             $data = $params[$key] . '(' . $data . ')';
         } else {
             Response::header("Content-Type", "application/json; charset=utf-8");
         }
     }
     if (Request::isLongServer()) {
         return $data;
     }
     echo $data;
     return null;
 }
Пример #10
0
 public function onRequest($request, $response)
 {
     $param = [];
     if (!empty($request->get)) {
         $param = $request->get;
     }
     if (!empty($request->post)) {
         $param += $request->post;
     }
     Request::parse($param);
     try {
         $result = ZRoute::route();
     } catch (\Exception $e) {
         $model = Formater::exception($e);
         $model['_view_mode'] = 'Json';
         $result = Response::display($model);
     }
     $response->end($result);
 }
Пример #11
0
 public function display()
 {
     $jsonData = \json_encode($this->model);
     $data = gzencode($jsonData);
     $pack = new MessagePacker();
     $len = strlen($data);
     $pack->writeInt($len + 16);
     $pack->writeInt($this->model['cmd']);
     $pack->writeInt($this->model['rid']);
     $pack->writeString($data, $len);
     if (Request::isHttp()) {
         Response::header("Content-Type", "application/zrpack; charset=utf-8");
     }
     if (Request::isLongServer()) {
         return array($jsonData, $pack->getData());
     }
     echo $pack->getData();
     return null;
 }
Пример #12
0
 /**
  * @return mixed
  * @throws \Exception
  * @desc fatal error处理
  */
 public static function fatalHandler()
 {
     $error = \error_get_last();
     if (empty($error)) {
         return;
     }
     if (!in_array($error['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR))) {
         return;
     }
     $config = ZConfig::get('project');
     $model = ZFormater::fatal($error);
     $info['data'] = null;
     if ($config['debug_mode']) {
         $info['debug'] = $model;
     }
     Log::info([\var_export($model, true)], 'fatal');
     $info['msg'] = $model['message'];
     $info['code'] = $model['code'];
     Response::status('200');
     if ('Php' == Request::getViewMode()) {
         if ($config['debug_mode']) {
             Request::setTplFile('public/exception.php');
         } else {
             Request::setTplFile('public/error.php');
         }
     }
     Response::display($info);
 }
Пример #13
0
 public static final function fatalHandler()
 {
     $error = \error_get_last();
     if (empty($error)) {
         return;
     }
     if (!in_array($error['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR))) {
         return;
     }
     Response::status('200');
     return Response::display(Formater::fatal($error));
 }
Пример #14
0
 public function doRequest($request, $response)
 {
     Protocol\Request::setRequest($request);
     Protocol\Response::setResponse($response);
     $this->onRequest($request, $response);
 }