视图

}

/**

  • 获取模版文件 格式 资源://模块@主题/控制器/操作

  • @param string $template 模版资源地址

  • @param string $layer 视图层(目录)名称

  • @return string
    */
    function T( t e m p l a t e = ′ ′ , template='', template=,layer=’’){

    // 解析模版资源地址
    if(false === strpos($template,’?/’)){
    t e m p l a t e = ′ h t t p : / / ′ . s t r r e p l a c e ( ′ : ′ , ′ / ′ , template = 'http://'.str_replace(':', '/', template=http://.strreplace(:,/,template);
    }
    i n f o = p a r s e u r l ( info = parse_url( info=parseurl(template);
    $file = i n f o [ ′ h o s t ′ ] . ( i s s e t ( info['host'].(isset( info[host].(isset(info[‘path’])?$info[‘path’]:’’);
    m o d u l e = i s s e t ( module = isset( module=isset(info[‘user’])?$info[‘user’].’/’:MODULE_NAME.’/’;
    $extend = $info[‘scheme’];
    $layer = l a y e r ? layer? layer?layer:C(‘DEFAULT_V_LAYER’);

    // 获取当前主题的模版路径
    a u t o = C ( ′ A U T O L O A D N A M E S P A C E ′ ) ; i f ( auto = C('AUTOLOAD_NAMESPACE'); if( auto=C(AUTOLOADNAMESPACE);if(auto && isset( a u t o [ auto[ auto[extend])){ // 扩展资源
    $baseUrl = a u t o [ auto[ auto[extend]. m o d u l e . module. module.layer.’/’;
    }elseif(C(‘VIEW_PATH’)){
    // 改变模块视图目录
    $baseUrl = C(‘VIEW_PATH’);
    }elseif(defined(‘TMPL_PATH’)){
    // 指定全局视图目录
    b a s e U r l = T M P L P A T H . baseUrl = TMPL_PATH. baseUrl=TMPLPATH.module;
    }else{
    b a s e U r l = A P P P A T H . baseUrl = APP_PATH. baseUrl=APPPATH.module.$layer.’/’;
    }

    // 获取主题
    t h e m e = s u b s t r c o u n t ( theme = substr_count( theme=substrcount(file,’/’)<2 ? C(‘DEFAULT_THEME’) : ‘’;

    // 分析模板文件规则
    $depr = C(‘TMPL_FILE_DEPR’);
    if(’’ == $file) {
    // 如果模板文件名为空 按照默认规则定位
    $file = CONTROLLER_NAME . KaTeX parse error: Expected 'EOF', got '}' at position 22: … ACTION_NAME; }̲elseif(false ==…file, ‘/’)){
    $file = CONTROLLER_NAME . $depr . $file;
    }elseif(’/’ != $depr){
    f i l e = s u b s t r c o u n t ( file = substr_count( file=substrcount(file,’/’)>1 ? substr_replace( f i l e , file, file,depr,strrpos($file,’/’),1) : str_replace(’/’, $depr, $file);
    }
    return b a s e U r l . ( baseUrl.( baseUrl.(theme? t h e m e . ′ / ′ : ′ ′ ) . theme.'/':''). theme./:).file.C(‘TMPL_TEMPLATE_SUFFIX’);
    }

/**

  • 获取输入参数 支持过滤和默认值

  • 使用方法:

  • I(‘id’,0); 获取id参数 自动判断get或者post

  • I(‘post.name’,’’,‘htmlspecialchars’); 获取$_POST[‘name’]

  • I(‘get.’); 获取$_GET

  • @param string $name 变量的名称 支持指定类型

  • @param mixed $default 不存在的时候默认值

  • @param mixed $filter 参数过滤方法

  • @param mixed $datas 要获取的额外数据源

  • @return mixed
    */
    function I( n a m e , name, name,default=’’, f i l t e r = n u l l , filter=null, filter=null,datas=null) {
    static P U T = n u l l ; i f ( s t r p o s ( _PUT = null; if(strpos( PUT=null;if(strpos(name,’/’)){ // 指定修饰符
    list( n a m e , name, name,type) = explode(’/’,$name,2);
    }elseif(C(‘VAR_AUTO_STRING’)){ // 默认强制转换为字符串
    KaTeX parse error: Expected 'EOF', got '}' at position 18: …pe = 's'; }̲ if(strpos(name,’.’)) { // 指定参数来源
    list( m e t h o d , method, method,name) = explode(’.’,$name,2);
    }else{ // 默认为自动判断
    KaTeX parse error: Expected 'EOF', got '}' at position 22: … = 'param'; }̲ switch(strtol…method)) {
    case ‘get’ :
    $input =& $_GET;
    break;
    case ‘post’ :
    $input =& P O S T ; b r e a k ; c a s e ′ p u t ′ : i f ( i s n u l l ( _POST; break; case 'put' : if(is_null( POST;break;caseput:if(isnull(_PUT)){
    parse_str(file_get_contents(‘php://input’), $_PUT);
    }
    $input = P U T ; b r e a k ; c a s e ′ p a r a m ′ : s w i t c h ( _PUT; break; case 'param' : switch( PUT;break;caseparam:switch(_SERVER[‘REQUEST_METHOD’]) {
    case ‘POST’:
    $input = P O S T ; b r e a k ; c a s e ′ P U T ′ : i f ( i s n u l l ( _POST; break; case 'PUT': if(is_null( POST;break;casePUT:if(isnull(_PUT)){
    parse_str(file_get_contents(‘php://input’), $_PUT);
    }
    $input = $_PUT;
    break;
    default:
    $input = $_GET;
    }
    break;
    case ‘path’ :
    i n p u t = a r r a y ( ) ; i f ( ! e m p t y ( input = array(); if(!empty( input=array();if(!empty(_SERVER[‘PATH_INFO’])){
    $depr = C(‘URL_PATHINFO_DEPR’);
    i n p u t = e x p l o d e ( input = explode( input=explode(depr,trim( S E R V E R [ ′ P A T H I N F O ′ ] , _SERVER['PATH_INFO'], SERVER[PATHINFO],depr));
    }
    break;
    case ‘request’ :
    $input =& $_REQUEST;
    break;
    case ‘session’ :
    $input =& $_SESSION;
    break;
    case ‘cookie’ :
    $input =& $_COOKIE;
    break;
    case ‘server’ :
    $input =& $_SERVER;
    break;
    case ‘globals’ :
    $input =& $GLOBALS;
    break;
    case ‘data’ :
    $input =& KaTeX parse error: Expected 'EOF', got '}' at position 64: … return null; }̲ if(''==name) { // 获取全部变量
    $data = $input;
    f i l t e r s = i s s e t ( filters = isset( filters=isset(filter)? f i l t e r : C ( ′ D E F A U L T F I L T E R ′ ) ; i f ( filter:C('DEFAULT_FILTER'); if( filter:C(DEFAULTFILTER);if(filters) {
    if(is_string($filters)){
    f i l t e r s = e x p l o d e ( ′ , ′ , filters = explode(',', filters=explode(,,filters);
    }
    foreach($filters as $filter){
    d a t a = a r r a y m a p r e c u r s i v e ( data = array_map_recursive( data=arraymaprecursive(filter,KaTeX parse error: Expected 'EOF', got '}' at position 25: … 参数过滤 }̲ } }elsei…input[$name])) { // 取值操作
    $data = i n p u t [ input[ input[name];
    f i l t e r s = i s s e t ( filters = isset( filters=isset(filter)? f i l t e r : C ( ′ D E F A U L T F I L T E R ′ ) ; i f ( filter:C('DEFAULT_FILTER'); if( filter:C(DEFAULTFILTER);if(filters) {
    if(is_string(KaTeX parse error: Expected '}', got 'EOF' at end of input: …f(0 === strpos(filters,’/’)){
    if(1 !== preg_match( f i l t e r s , ( s t r i n g ) filters,(string) filters,(string)data)){
    // 支持正则验证
    return isset($default) ? $default : null;
    }
    }else{
    f i l t e r s = e x p l o d e ( ′ , ′ , filters = explode(',', filters=explode(,,filters);
    }
    }elseif(is_int($filters)){
    f i l t e r s = a r r a y ( filters = array( filters=array(filters);
    }

         if(is_array($filters)){
             foreach($filters as $filter){
                 if(function_exists($filter)) {
                     $data   =   is_array($data) ? array_map_recursive($filter,$data) : $filter($data); // 参数过滤
                 }else{
                     $data   =   filter_var($data,is_int($filter) ? $filter : filter_id($filter));
                     if(false === $data) {
                         return   isset($default) ? $default : null;
                     }
                 }
             }
         }
     }
     if(!empty($type)){
     	switch(strtolower($type)){
     		case 'a':	// 数组
     			$data 	=	(array)$data;
     			break;
     		case 'd':	// 数字
     			$data 	=	(int)$data;
     			break;
     		case 'f':	// 浮点
     			$data 	=	(float)$data;
     			break;
     		case 'b':	// 布尔
     			$data 	=	(boolean)$data;
     			break;
             case 's':   // 字符串
             default:
                 $data   =   (string)$data;
     	}
     }
    

    }else{ // 变量默认值
    d a t a = i s s e t ( data = isset( data=isset(default)?KaTeX parse error: Expected 'EOF', got '}' at position 16: default:null; }̲ is_array(data) && array_walk_recursive($data,‘think_filter’);
    return $data;
    }

function array_map_recursive($filter, $data) {
r e s u l t = a r r a y ( ) ; f o r e a c h ( result = array(); foreach ( result=array();foreach(data as $key => $val) {
r e s u l t [ result[ result[key] = is_array( v a l ) ? a r r a y m a p r e c u r s i v e ( val) ? array_map_recursive( val)?arraymaprecursive(filter, v a l ) : c a l l u s e r f u n c ( val) : call_user_func( val):calluserfunc(filter, $val);
}
return $result;
}

/**

  • 设置和获取统计数据
  • 使用方法:
  • N(‘db’,1); // 记录数据库操作次数
  • N(‘read’,1); // 记录读取次数
  • echo N(‘db’); // 获取当前页面数据库的所有操作次数
  • echo N(‘read’); // 获取当前页面读取次数
  • @param string $key 标识位置
  • @param integer $step 步进值
  • @param boolean $save 是否保存结果
  • @return mixed
    */
    function N($key, s t e p = 0 , step=0, step=0,save=false) {
    static n u m = a r r a y ( ) ; i f ( ! i s s e t ( _num = array(); if (!isset( num=array();if(!isset(_num[$key])) {
    n u m [ _num[ num[key] = (false !== KaTeX parse error: Expected group after '_' at position 12: save)? S('N_̲'.key) : 0;
    }
    if (empty($step)){
    return n u m [ _num[ num[key];
    }else{
    n u m [ _num[ num[key] = n u m [ _num[ num[key] + (int)$step;
    }
    if(false !== KaTeX parse error: Expected group after '_' at position 25: … 保存结果 S('N_̲'.key, n u m [ _num[ num[key],$save);
    }
    return null;
    }

/**

  • 字符串命名风格转换
  • type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
  • @param string $name 字符串
  • @param integer $type 转换类型
  • @return string
    */
    function parse_name($name, KaTeX parse error: Expected '}', got 'EOF' at end of input: type=0) { if (type) {
    return ucfirst(preg_replace_callback(’/([a-zA-Z])/’, function(KaTeX parse error: Expected '}', got 'EOF' at end of input: …urn strtoupper(match[1]);}, $name));
    } else {
    return strtolower(trim(preg_replace("/[A-Z]/", "
    \0", $name), “_”));
    }
    }

/**

  • 优化的require_once
  • @param string $filename 文件地址
  • @return boolean
    */
    function require_cache($filename) {
    static i m p o r t F i l e s = a r r a y ( ) ; i f ( ! i s s e t ( _importFiles = array(); if (!isset( importFiles=array();if(!isset(_importFiles[KaTeX parse error: Expected '}', got 'EOF' at end of input: …le_exists_case(filename)) {
    require $filename;
    i m p o r t F i l e s [ _importFiles[ importFiles[filename] = true;
    } else {
    i m p o r t F i l e s [ _importFiles[ importFiles[filename] = false;
    }
    }
    return i m p o r t F i l e s [ _importFiles[ importFiles[filename];
    }

/**

  • 区分大小写的文件存在判断
  • @param string $filename 文件地址
  • @return boolean
    */
    function file_exists_case(KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ if (is_file(filename)) {
    if (IS_WIN && APP_DEBUG) {
    if (basename(realpath( f i l e n a m e ) ) ! = b a s e n a m e ( filename)) != basename( filename))!=basename(filename))
    return false;
    }
    return true;
    }
    return false;
    }

/**

  • 导入所需的类库 同java的Import 本函数有缓存功能
  • @param string $class 类库命名空间字符串
  • @param string $baseUrl 起始路径
  • @param string $ext 导入的文件扩展名
  • @return boolean
    */
    function import($class, $baseUrl = ‘’, $ext=EXT) {
    static $_file = array();
    $class = str_replace(array(’.’, ‘#’), array(’/’, ‘.’), c l a s s ) ; i f ( i s s e t ( class); if (isset( class);if(isset(_file[$class . $baseUrl]))
    return true;
    else
    f i l e [ _file[ file[class . $baseUrl] = true;
    $class_strut = explode(’/’, c l a s s ) ; i f ( e m p t y ( class); if (empty( class);if(empty(baseUrl)) {
    if (’@’ == $class_strut[0] || MODULE_NAME == $class_strut[0]) {
    //加载当前模块的类库
    $baseUrl = MODULE_PATH;
    c l a s s = s u b s t r r e p l a c e ( class = substr_replace( class=substrreplace(class, ‘’, 0, strlen($class_strut[0]) + 1);
    }elseif (‘Common’ == $class_strut[0]) {
    //加载公共模块的类库
    $baseUrl = COMMON_PATH;
    c l a s s = s u b s t r ( class = substr( class=substr(class, 7);
    }elseif (in_array( c l a s s s t r u t [ 0 ] , a r r a y ( ′ T h i n k ′ , ′ O r g ′ , ′ B e h a v i o r ′ , ′ C o m ′ , ′ V e n d o r ′ ) ) ∣ ∣ i s d i r ( L I B P A T H . class_strut[0],array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH. classstrut[0],array(Think,Org,Behavior,Com,Vendor))isdir(LIBPATH.class_strut[0])) {
    // 系统类库包和第三方类库包
    $baseUrl = LIB_PATH;
    }else { // 加载其他模块的类库
    KaTeX parse error: Expected 'EOF', got '}' at position 26: …APP_PATH; }̲ } if (substr…baseUrl, -1) != ‘/’)
    $baseUrl .= ‘/’;
    $classfile = $baseUrl . $class . e x t ; i f ( ! c l a s s e x i s t s ( b a s e n a m e ( ext; if (!class_exists(basename( ext;if(!classexists(basename(class),false)) {
    // 如果类不存在 则导入类库文件
    return require_cache($classfile);
    }
    return null;
    }

/**

  • 基于命名空间方式导入函数库
  • load(’@.Util.Array’)
  • @param string $name 函数库命名空间字符串
  • @param string $baseUrl 起始路径
  • @param string $ext 导入的文件扩展名
  • @return void
    */
    function load($name, $baseUrl=’’, $ext=’.php’) {
    $name = str_replace(array(’.’, ‘#’), array(’/’, ‘.’), n a m e ) ; i f ( e m p t y ( name); if (empty( name);if(empty(baseUrl)) {
    if (0 === strpos($name, ‘@/’)) {//加载当前模块函数库
    $baseUrl = MODULE_PATH.‘Common/’;
    n a m e = s u b s t r ( name = substr( name=substr(name, 2);
    } else { //加载其他模块函数库
    $array = explode(’/’, $name);
    b a s e U r l = A P P P A T H . a r r a y s h i f t ( baseUrl = APP_PATH . array_shift( baseUrl=APPPATH.arrayshift(array).’/Common/’;
    n a m e = i m p l o d e ( ′ / ′ , name = implode('/', name=implode(/,array);
    }
    }
    if (substr($baseUrl, -1) != ‘/’)
    b a s e U r l . = ′ / ′ ; r e q u i r e c a c h e ( baseUrl .= '/'; require_cache( baseUrl.=/;requirecache(baseUrl . $name . $ext);
    }

/**

  • 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
  • @param string $class 类库
  • @param string $baseUrl 基础目录
  • @param string $ext 类库后缀
  • @return boolean
    */
    function vendor($class, $baseUrl = ‘’, KaTeX parse error: Expected '}', got 'EOF' at end of input: …) { if (empty(baseUrl))
    b a s e U r l = V E N D O R P A T H ; r e t u r n i m p o r t ( baseUrl = VENDOR_PATH; return import( baseUrl=VENDORPATH;returnimport(class, $baseUrl, $ext);
    }

/**

  • 实例化模型类 格式 [资源://][模块/]模型
  • @param string $name 资源地址
  • @param string $layer 模型层名称
  • @return Think\Model
    */
    function D( n a m e = ′ ′ , name='', name=,layer=’’) {
    if(empty($name)) return new Think\Model;
    static $_model = array();
    $layer = KaTeX parse error: Double subscript at position 22: … : C('DEFAULT_M_̲LAYER'); if(is…_model[ n a m e . name. name.layer]))
    return m o d e l [ _model[ model[name.$layer];
    c l a s s = p a r s e r e s n a m e ( class = parse_res_name( class=parseresname(name, l a y e r ) ; i f ( c l a s s e x i s t s ( layer); if(class_exists( layer);if(classexists(class)) {
    $model = new c l a s s ( b a s e n a m e ( class(basename( class(basename(name));
    }elseif(false === strpos(KaTeX parse error: Expected '}', got 'EOF' at end of input: …port('Common/'.layer.’/’.$class);
    }else{
    c l a s s = ′ C o m m o n ′ . class = '\\Common\\'. class=Common.layer.’\’. n a m e . name. name.layer;
    }
    m o d e l = c l a s s e x i s t s ( model = class_exists( model=classexists(class)? new c l a s s ( class( class(name) : new Think\Model(KaTeX parse error: Expected 'EOF', got '}' at position 9: name); }̲else { Thi…class,Think\Log::NOTICE);
    KaTeX parse error: Expected 'EOF', got '\Model' at position 25: … = new Think\̲M̲o̲d̲e̲l̲(basename(name));
    }
    m o d e l [ _model[ model[name.$layer] = $model;
    return $model;
    }

/**

  • 实例化一个没有模型文件的Model
  • @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
  • @param string $tablePrefix 表前缀
  • @param mixed $connection 数据库连接信息
  • @return Think\Model
    */
    function M($name=’’, t a b l e P r e f i x = ′ ′ , tablePrefix='', tablePrefix=,connection=’’) {
    static m o d e l = a r r a y ( ) ; i f ( s t r p o s ( _model = array(); if(strpos( model=array();if(strpos(name,’:’)) {
    list( c l a s s , class, class,name) = explode(’:’,$name);
    }else{
    $class = ‘Think\Model’;
    }
    g u i d = ( i s a r r a y ( guid = (is_array( guid=(isarray(connection)?implode(’’, c o n n e c t i o n ) : connection): connection):connection).$tablePrefix . $name . ‘_’ . c l a s s ; i f ( ! i s s e t ( class; if (!isset( class;if(!isset(_model[$guid]))
    m o d e l [ _model[ model[guid] = new c l a s s ( class( class(name, t a b l e P r e f i x , tablePrefix, tablePrefix,connection);
    return m o d e l [ _model[ model[guid];
    }

/**

  • 解析资源地址并导入类库文件
  • 例如 module/controller addon://module/behavior
  • @param string $name 资源地址 格式:[扩展://][模块/]资源名
  • @param string $layer 分层名称
  • @param integer $level 控制器层次
  • @return string
    */
    function parse_res_name( n a m e , name, name,layer,KaTeX parse error: Expected '}', got 'EOF' at end of input: …1){ if(strpos(name,’?/’)) {// 指定扩展资源
    list( e x t e n d , extend, extend,name) = explode(’?/’,$name);
    }else{
    KaTeX parse error: Expected 'EOF', got '}' at position 18: …tend = ''; }̲ if(strpos(name,’/’) && substr_count( n a m e , ′ / ′ ) > = name, '/')>= name,/)>=level){ // 指定模块
    list( m o d u l e , module, module,name) = explode(’/’,$name,2);
    }else{
    $module = defined(‘MODULE_NAME’) ? MODULE_NAME : ‘’ ;
    }
    a r r a y = e x p l o d e ( ′ / ′ , array = explode('/', array=explode(/,name);
    if(!C(‘APP_USE_NAMESPACE’)){
    c l a s s = p a r s e n a m e ( class = parse_name( class=parsename(name, 1);
    import( m o d u l e . ′ / ′ . module.'/'. module./.layer.’/’. c l a s s . class. class.layer);
    }else{
    $class = m o d u l e . ′ ′ . module.'\\'. module..layer;
    foreach($array as $name){
    c l a s s . = ′ ′ . p a r s e n a m e ( class .= '\\'.parse_name( class.=.parsename(name, 1);
    }
    // 导入资源类库
    if($extend){ // 扩展资源
    $class = e x t e n d . ′ ′ . extend.'\\'. extend..class;
    }
    }
    return c l a s s . class. class.layer;
    }

/**

  • 用于实例化访问控制器
  • @param string $name 控制器名
  • @param string $path 控制器命名空间(路径)
  • @return Think\Controller|false
    */
    function controller( n a m e , name, name,path=’’){
    $layer = C(‘DEFAULT_C_LAYER’);
    if(!C(‘APP_USE_NAMESPACE’)){
    c l a s s = p a r s e n a m e ( class = parse_name( class=parsename(name, 1). l a y e r ; i m p o r t ( M O D U L E N A M E . ′ / ′ . layer; import(MODULE_NAME.'/'. layer;import(MODULENAME./.layer.’/’.$class);
    }else{
    $class = ( p a t h ? b a s e n a m e ( A D D O N P A T H ) . ′ ′ . path ? basename(ADDON_PATH).'\\'. path?basename(ADDONPATH)..path : MODULE_NAME ).’\’.$layer;
    a r r a y = e x p l o d e ( ′ / ′ , array = explode('/', array=explode(/,name);
    foreach($array as $name){
    c l a s s . = ′ ′ . p a r s e n a m e ( class .= '\\'.parse_name( class.=.parsename(name, 1);
    }
    $class .= KaTeX parse error: Expected 'EOF', got '}' at position 9: layer; }̲ if(class_exis…class)) {
    return new $class();
    }else {
    return false;
    }
    }

/**

  • 实例化多层控制器 格式:[资源://][模块/]控制器

  • @param string $name 资源地址

  • @param string $layer 控制层名称

  • @param integer $level 控制器层次

  • @return Think\Controller|false
    */
    function A( n a m e , name, name,layer=’’,$level=0) {
    static $_action = array();
    $layer = $layer? : C(‘DEFAULT_C_LAYER’);
    $level = l e v e l ? : ( level? : ( level?:(layer == C(‘DEFAULT_C_LAYER’)?C(‘CONTROLLER_LEVEL’):1);
    if(isset( a c t i o n [ _action[ action[name.$layer]))
    return a c t i o n [ _action[ action[name.$layer];

    c l a s s = p a r s e r e s n a m e ( class = parse_res_name( class=parseresname(name, l a y e r , layer, layer,level);
    if(class_exists($class)) {
    $action = new $class();
    a c t i o n [ _action[ action[name.$layer] = $action;
    return $action;
    }else {
    return false;
    }
    }

/**

  • 远程调用控制器的操作方法 URL 参数格式 [资源://][模块/]控制器/操作
  • @param string $url 调用地址
  • @param string|array $vars 调用参数 支持字符串和数组
  • @param string $layer 要调用的控制层名称
  • @return mixed
    */
    function R( u r l , url, url,vars=array(),$layer=’’) {
    i n f o = p a t h i n f o ( info = pathinfo( info=pathinfo(url);
    $action = $info[‘basename’];
    $module = $info[‘dirname’];
    c l a s s = A ( class = A( class=A(module, l a y e r ) ; i f ( layer); if( layer);if(class){
    if(is_string(KaTeX parse error: Expected '}', got 'EOF' at end of input: … parse_str(vars,KaTeX parse error: Expected 'EOF', got '}' at position 13: vars); }̲ return ca…class, a c t i o n . C ( ′ A C T I O N S U F F I X ′ ) ) , action.C('ACTION_SUFFIX')), action.C(ACTIONSUFFIX)),vars);
    }else{
    return false;
    }
    }

/**

  • 处理标签扩展
  • @param string $tag 标签名称
  • @param mixed $params 传入参数
  • @return void
    */
    function tag(KaTeX parse error: Expected 'EOF', got '&' at position 6: tag, &̲params=NULL) {
    \Think\Hook::listen( t a g , tag, tag,params);
    }

/**

  • 执行某个行为
  • @param string $name 行为名称
  • @param string $tag 标签名称(行为类无需传入)
  • @param Mixed $params 传入的参数
  • @return void
    */
    function B($name, KaTeX parse error: Expected 'EOF', got '&' at position 8: tag='',&̲params=NULL) {
    if(’’==$tag){
    KaTeX parse error: Expected 'EOF', got '}' at position 25: … 'Behavior'; }̲ return \Think…name, t a g , tag, tag,params);
    }

/**

  • 去除代码中的空白和注释
  • @param string $content 代码内容
  • @return string
    */
    function strip_whitespace($content) {
    $stripStr = ‘’;
    //分析php源码
    t o k e n s = t o k e n g e t a l l ( tokens = token_get_all( tokens=tokengetall(content);
    l a s t s p a c e = f a l s e ; f o r ( last_space = false; for ( lastspace=false;for(i = 0, j = c o u n t ( j = count( j=count(tokens); $i < $j; KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (is_string(tokens[$i])) {
    $last_space = false;
    $stripStr .= t o k e n s [ tokens[ tokens[i];
    } else {
    switch ( t o k e n s [ tokens[ tokens[i][0]) {
    //过滤各种PHP注释
    case T_COMMENT:
    case T_DOC_COMMENT:
    break;
    //过滤空格
    case T_WHITESPACE:
    if (!$last_space) {
    $stripStr .= ’ ';
    $last_space = true;
    }
    break;
    case T_START_HEREDOC:
    $stripStr .= “<< break;
    case T_END_HEREDOC:
    KaTeX parse error: Expected 'EOF', got '\n' at position 20: …pStr .= "THINK;\̲n̲"; …k = $i+1; $k < $j; KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(is_string(tokens[$k]) && t o k e n s [ tokens[ tokens[k] == ‘;’) {
    $i = KaTeX parse error: Expected 'EOF', got '}' at position 57: … }̲ else if(tokens[$k][0] == T_CLOSE_TAG) {
    break;
    }
    }
    break;
    default:
    $last_space = false;
    $stripStr .= t o k e n s [ tokens[ tokens[i][1];
    }
    }
    }
    return $stripStr;
    }

/**

  • 自定义异常处理
  • @param string $msg 异常消息
  • @param string $type 异常类型 默认为Think\Exception
  • @param integer $code 异常代码 默认为0
  • @return void
    */
    function throw_exception($msg, $type=‘Think\Exception’, KaTeX parse error: Expected '}', got '\Log' at position 17: …ode=0) { Think\̲L̲o̲g̲::record('建议使用E…type, false))
    throw new t y p e ( type( type(msg, KaTeX parse error: Expected 'EOF', got '\Think' at position 24: …else Think\̲T̲h̲i̲n̲k̲::halt(msg); // 异常类型不存在则输出错误信息字串
    }

/**

  • 浏览器友好的变量输出
  • @param mixed $var 变量
  • @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
  • @param string $label 标签 默认为空
  • @param boolean $strict 是否严谨 默认为true
  • @return void|string
    */
    function dump($var, $echo=true, $label=null, $strict=true) {
    l a b e l = ( label = ( label=(label === null) ? ‘’ : rtrim(KaTeX parse error: Double superscript at position 12: label) . ' '̲; if (!strict) {
    if (ini_get(‘html_errors’)) {
    o u t p u t = p r i n t r ( output = print_r( output=printr(var, true);
    $output = ‘
    ’ . 
            
             
              
               
                l
               
               
                a
               
               
                b
               
               
                e
               
               
                l
               
               
                .
               
               
                h
               
               
                t
               
               
                m
               
               
                l
               
               
                s
               
               
                p
               
               
                e
               
               
                c
               
               
                i
               
               
                a
               
               
                l
               
               
                c
               
               
                h
               
               
                a
               
               
                r
               
               
                s
               
               
                (
               
              
              
               label . htmlspecialchars(
              
             
            label.htmlspecialchars(output, ENT_QUOTES) . ‘
    ’;
    } else {
    $output = l a b e l . p r i n t r ( label . print_r( label.printr(var, true);
    }
    } else {
    ob_start();
    var_dump($var);
    $output = ob_get_clean();
    if (!extension_loaded(‘xdebug’)) {
    $output = preg_replace(’/]=>\n(\s+)/m’, '] => ', $output);
    $output = ‘
    ’ . 
            
             
              
               
                l
               
               
                a
               
               
                b
               
               
                e
               
               
                l
               
               
                .
               
               
                h
               
               
                t
               
               
                m
               
               
                l
               
               
                s
               
               
                p
               
               
                e
               
               
                c
               
               
                i
               
               
                a
               
               
                l
               
               
                c
               
               
                h
               
               
                a
               
               
                r
               
               
                s
               
               
                (
               
              
              
               label . htmlspecialchars(
              
             
            label.htmlspecialchars(output, ENT_QUOTES) . ‘
    ’;
    }
    }
    if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …o) { echo(output);
    return null;
    }else
    return $output;
    }

/**

  • 设置当前页面的布局
  • @param string|false $layout 布局名称 为false的时候表示关闭布局
  • @return void
    */
    function layout($layout) {
    if(false !== KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(is_string(layout)) { // 设置新的布局模板
    C(‘LAYOUT_NAME’,$layout);
    }
    }else{// 临时关闭布局
    C(‘LAYOUT_ON’,false);
    }
    }

/**

  • URL组装 支持不同URL模式

  • @param string $url URL表达式,格式:’[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2…’

  • @param string|array $vars 传入的参数,支持数组和字符串

  • @param string|boolean $suffix 伪静态后缀,默认为true表示获取配置值

  • @param boolean $domain 是否显示域名

  • @return string
    */
    function U( u r l = ′ ′ , url='', url=,vars=’’, s u f f i x = t r u e , suffix=true, suffix=true,domain=false) {
    // 解析URL
    i n f o = p a r s e u r l ( info = parse_url( info=parseurl(url);
    u r l = ! e m p t y ( url = !empty( url=!empty(info[‘path’])? i n f o [ ′ p a t h ′ ] : A C T I O N N A M E ; i f ( i s s e t ( info['path']:ACTION_NAME; if(isset( info[path]:ACTIONNAME;if(isset(info[‘fragment’])) { // 解析锚点
    $anchor = i n f o [ ′ f r a g m e n t ′ ] ; i f ( f a l s e ! = = s t r p o s ( info['fragment']; if(false !== strpos( info[fragment];if(false!==strpos(anchor,’?’)) { // 解析参数
    list( a n c h o r , anchor, anchor,info[‘query’]) = explode(’?’,KaTeX parse error: Expected 'EOF', got '}' at position 17: …nchor,2); }̲ i…anchor,’@’)) { // 解析域名
    list( a n c h o r , anchor, anchor,host) = explode(’@’,KaTeX parse error: Expected 'EOF', got '}' at position 18: …chor, 2); }̲ }elseif(false…url,’@’)) { // 解析域名
    list( u r l , url, url,host) = explode(’@’,KaTeX parse error: Expected 'EOF', got '}' at position 20: …['path'], 2); }̲ // 解析子域名 if(…host)) {
    $domain = h o s t . ( s t r p o s ( host.(strpos( host.(strpos(host,’.’)?’’:strstr(KaTeX parse error: Expected 'EOF', got '}' at position 30: …HOST'],'.')); }̲elseif(domain===true){
    $domain = $_SERVER[‘HTTP_HOST’];
    if(C(‘APP_SUB_DOMAIN_DEPLOY’) ) { // 开启子域名部署
    $domain = d o m a i n = = ′ l o c a l h o s t ′ ? ′ l o c a l h o s t ′ : ′ w w w ′ . s t r s t r ( domain=='localhost'?'localhost':'www'.strstr( domain==localhost?localhost:www.strstr(_SERVER[‘HTTP_HOST’],’.’);
    // ‘子域名’=>array(‘模块[/控制器]’);
    foreach (C(‘APP_SUB_DOMAIN_RULES’) as $key => $rule) {
    r u l e = i s a r r a y ( rule = is_array( rule=isarray(rule)? r u l e [ 0 ] : rule[0]: rule[0]:rule;
    if(false === strpos(KaTeX parse error: Expected 'EOF', got '&' at position 10: key,'*') &̲& 0=== strpos(url,$rule)) {
    $domain = k e y . s t r s t r ( key.strstr( key.strstr(domain,’.’); // 生成对应子域名
    u r l = s u b s t r r e p l a c e ( url = substr_replace( url=substrreplace(url,’’,0,strlen($rule));
    break;
    }
    }
    }
    }

    // 解析参数
    if(is_string(KaTeX parse error: Expected '}', got '&' at position 18: …rs)) { // aaa=1&̲bbb=2 转换成数组 …vars,KaTeX parse error: Expected 'EOF', got '}' at position 9: vars); }̲elseif(!is_arra…vars)){
    KaTeX parse error: Expected 'EOF', got '}' at position 18: …rs = array(); }̲ if(isset(info[‘query’])) { // 解析地址里面参数 合并到vars
    parse_str( i n f o [ ′ q u e r y ′ ] , info['query'], info[query],params);
    v a r s = a r r a y m e r g e ( vars = array_merge( vars=arraymerge(params,$vars);
    }

    // URL组装
    $depr = C(‘URL_PATHINFO_DEPR’);
    u r l C a s e = C ( ′ U R L C A S E I N S E N S I T I V E ′ ) ; i f ( urlCase = C('URL_CASE_INSENSITIVE'); if( urlCase=C(URLCASEINSENSITIVE);if(url) {
    if(0=== strpos($url,’/’)) {// 定义路由
    $route = true;
    u r l = s u b s t r ( url = substr( url=substr(url,1);
    if(’/’ != $depr) {
    u r l = s t r r e p l a c e ( ′ / ′ , url = str_replace('/', url=strreplace(/,depr,$url);
    }
    }else{
    if(’/’ != $depr) { // 安全替换
    u r l = s t r r e p l a c e ( ′ / ′ , url = str_replace('/', url=strreplace(/,depr,$url);
    }
    // 解析模块、控制器和操作
    u r l = t r i m ( url = trim( url=trim(url,$depr);
    p a t h = e x p l o d e ( path = explode( path=explode(depr,$url);
    $var = array();
    $varModule = C(‘VAR_MODULE’);
    $varController = C(‘VAR_CONTROLLER’);
    $varAction = C(‘VAR_ACTION’);
    v a r [ var[ var[varAction] = !empty( p a t h ) ? a r r a y p o p ( path)?array_pop( path)?arraypop(path):ACTION_NAME;
    v a r [ var[ var[varController] = !empty( p a t h ) ? a r r a y p o p ( path)?array_pop( path)?arraypop(path):CONTROLLER_NAME;
    if(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(isset(maps[strtolower( v a r [ var[ var[varController])])) {
    $maps = m a p s [ s t r t o l o w e r ( maps[strtolower( maps[strtolower(var[ v a r C o n t r o l l e r ] ) ] ; i f ( varController])]; if( varController])];if(action = array_search(strtolower( v a r [ var[ var[varAction]),$maps)){
    v a r [ var[ var[varAction] = KaTeX parse error: Expected 'EOF', got '}' at position 26: … }̲ }…maps = C(‘URL_CONTROLLER_MAP’)) {
    if( c o n t r o l l e r = a r r a y s e a r c h ( s t r t o l o w e r ( controller = array_search(strtolower( controller=arraysearch(strtolower(var[ v a r C o n t r o l l e r ] ) , varController]), varController]),maps)){
    v a r [ var[ var[varController] = KaTeX parse error: Expected 'EOF', got '}' at position 26: …; }̲ } …urlCase) {
    v a r [ var[ var[varController] = parse_name( v a r [ var[ var[varController]);
    }
    $module = ‘’;

         if(!empty($path)) {
             $var[$varModule]    =   implode($depr,$path);
         }else{
             if(C('MULTI_MODULE')) {
                 if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){
                     $var[$varModule]=   MODULE_NAME;
                 }
             }
         }
         if($maps = C('URL_MODULE_MAP')) {
             if($_module = array_search(strtolower($var[$varModule]),$maps)){
                 $var[$varModule] = $_module;
             }
         }
         if(isset($var[$varModule])){
             $module =   $var[$varModule];
             unset($var[$varModule]);
         }
         
     }
    

    }

    if(C(‘URL_MODEL’) == 0) { // 普通模式URL转换
    KaTeX parse error: Expected group after '_' at position 16: url = _̲_APP__.'?'.C('V…module}&".http_build_query(array_reverse( v a r ) ) ; i f ( var)); if( var));if(urlCase){
    u r l = s t r t o l o w e r ( url = strtolower( url=strtolower(url);
    }
    if(!empty($vars)) {
    v a r s = h t t p b u i l d q u e r y ( vars = http_build_query( vars=httpbuildquery(vars);
    KaTeX parse error: Expected 'EOF', got '&' at position 13: url .= '&̲'.vars;
    }
    }else{ // PATHINFO模式或者兼容URL模式
    if(isset($route)) {
    KaTeX parse error: Expected group after '_' at position 12: url = _̲_APP__.'/'.rtri…url,$depr);
    }else{
    KaTeX parse error: Expected 'EOF', got '&' at position 36: …'BIND_MODULE') &̲& BIND_MODULE==module )? ‘’ : $module;
    KaTeX parse error: Expected group after '_' at position 12: url = _̲_APP__.'/'.(module? m o d u l e . M O D U L E P A T H I N F O D E P R : ′ ′ ) . i m p l o d e ( module.MODULE_PATHINFO_DEPR:'').implode( module.MODULEPATHINFODEPR:).implode(depr,array_reverse(KaTeX parse error: Expected 'EOF', got '}' at position 13: var)); }̲ if(urlCase){
    u r l = s t r t o l o w e r ( url = strtolower( url=strtolower(url);
    }
    if(!empty(KaTeX parse error: Expected '}', got 'EOF' at end of input: … foreach (vars as $var => KaTeX parse error: Expected '}', got 'EOF' at end of input: …if('' !== trim(val)) $url .= $depr . $var . d e p r . u r l e n c o d e ( depr . urlencode( depr.urlencode(val);
    }
    }
    if($suffix) {
    $suffix = s u f f i x = = = t r u e ? C ( ′ U R L H T M L S U F F I X ′ ) : suffix===true?C('URL_HTML_SUFFIX'): suffix===true?C(URLHTMLSUFFIX):suffix;
    if( p o s = s t r p o s ( pos = strpos( pos=strpos(suffix, ‘|’)){
    s u f f i x = s u b s t r ( suffix = substr( suffix=substr(suffix, 0, KaTeX parse error: Expected 'EOF', got '}' at position 16: pos); }̲ if(suffix && ‘/’ != substr($url,-1)){
    u r l . = ′ . ′ . l t r i m ( url .= '.'.ltrim( url.=..ltrim(suffix,’.’);
    }
    }
    }
    if(isset($anchor)){
    KaTeX parse error: Expected 'EOF', got '#' at position 10: url .= '#̲'.anchor;
    }
    if($domain) {
    u r l = ( i s s s l ( ) ? ′ h t t p s : / / ′ : ′ h t t p : / / ′ ) . url = (is_ssl()?'https://':'http://'). url=(isssl()?https://:http://).domain.$url;
    }
    return $url;
    }

/**

  • 渲染输出Widget
  • @param string $name Widget名称
  • @param array $data 传入的参数
  • @return void
    */
    function W($name, KaTeX parse error: Expected '}', got 'EOF' at end of input: …)) { return R(name,$data,‘Widget’);
    }

/**

  • 判断是否SSL协议
  • @return boolean
    */
    function is_ssl() {
    if(isset($_SERVER[‘HTTPS’]) && (‘1’ == S E R V E R [ ′ H T T P S ′ ] ∣ ∣ ′ o n ′ = = s t r t o l o w e r ( _SERVER['HTTPS'] || 'on' == strtolower( SERVER[HTTPS]on==strtolower(_SERVER[‘HTTPS’]))){
    return true;
    }elseif(isset($_SERVER[‘SERVER_PORT’]) && (‘443’ == $_SERVER[‘SERVER_PORT’] )) {
    return true;
    }
    return false;
    }

/**

  • URL重定向
  • @param string $url 重定向的URL地址
  • @param integer $time 重定向的等待时间(秒)
  • @param string $msg 重定向前的提示信息
  • @return void
    */
    function redirect($url, $time=0, $msg=’’) {
    //多行URL地址支持
    $url = str_replace(array("\n", “\r”), ‘’, u r l ) ; i f ( e m p t y ( url); if (empty( url);if(empty(msg))
    KaTeX parse error: Expected '}', got 'EOF' at end of input: msg = "系统将在{time}秒之后自动跳转到{$url}!";
    if (!headers_sent()) {
    // redirect
    if (0 === $time) {
    header('Location: ’ . KaTeX parse error: Expected 'EOF', got '}' at position 12: url); }̲ else { …time};url={KaTeX parse error: Expected 'EOF', got '}' at position 4: url}̲"); ec…msg);
    }
    exit();
    } else {
    KaTeX parse error: Expected '}', got 'EOF' at end of input: …esh' content='{time};URL={KaTeX parse error: Expected 'EOF', got '}' at position 4: url}̲'>"; if (time != 0)
    $str .= m s g ; e x i t ( msg; exit( msg;exit(str);
    }
    }

/**

  • 缓存管理
  • @param mixed $name 缓存名称,如果为数组表示进行缓存设置
  • @param mixed $value 缓存值
  • @param mixed $options 缓存参数
  • @return mixed
    */
    function S( n a m e , name, name,value=’’,$options=null) {
    static c a c h e = ′ ′ ; i f ( i s a r r a y ( cache = ''; if(is_array( cache=;if(isarray(options)){
    // 缓存操作的同时初始化
    t y p e = i s s e t ( type = isset( type=isset(options[‘type’])?$options[‘type’]:’’;
    KaTeX parse error: Expected 'EOF', got '\Cache' at position 21: … = Think\̲C̲a̲c̲h̲e̲::getInstance(type,KaTeX parse error: Expected 'EOF', got '}' at position 12: options); }̲elseif(is_array…name)) { // 缓存初始化
    t y p e = i s s e t ( type = isset( type=isset(name[‘type’])?$name[‘type’]:’’;
    KaTeX parse error: Expected 'EOF', got '\Cache' at position 21: … = Think\̲C̲a̲c̲h̲e̲::getInstance(type,$name);
    return KaTeX parse error: Expected 'EOF', got '}' at position 9: cache; }̲elseif(empty(cache)) { // 自动初始化
    $cache = Think\Cache::getInstance();
    }
    if(’’=== $value){ // 获取缓存
    return c a c h e − > g e t ( cache->get( cache>get(name);
    }elseif(is_null($value)) { // 删除缓存
    return c a c h e − > r m ( cache->rm( cache>rm(name);
    }else { // 缓存数据
    if(is_array($options)) {
    e x p i r e = i s s e t ( expire = isset( expire=isset(options[‘expire’])?$options[‘expire’]:NULL;
    }else{
    e x p i r e = i s n u m e r i c ( expire = is_numeric( expire=isnumeric(options)?$options:NULL;
    }
    return c a c h e − > s e t ( cache->set( cache>set(name, $value, $expire);
    }
    }

/**

  • 快速文件数据读取和保存 针对简单类型数据 字符串、数组
  • @param string $name 缓存名称
  • @param mixed $value 缓存值
  • @param string $path 缓存路径
  • @return mixed
    */
    function F($name, $value=’’, $path=DATA_PATH) {
    static $_cache = array();
    $filename = $path . $name . ‘.php’;
    if (’’ !== KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (is_null(value)) {
    // 删除缓存
    if(false !== strpos(KaTeX parse error: Expected '}', got 'EOF' at end of input: … unset(_cache[KaTeX parse error: Expected 'EOF', got '\Storage' at position 34: … return Think\̲S̲t̲o̲r̲a̲g̲e̲::unlink(filename,‘F’);
    }
    } else {
    Think\Storage::put( f i l e n a m e , s e r i a l i z e ( filename,serialize( filename,serialize(value),‘F’);
    // 缓存数据
    c a c h e [ _cache[ cache[name] = KaTeX parse error: Expected 'EOF', got '}' at position 35: …urn null; }̲ } // 获取缓存数据 …_cache[$name]))
    return c a c h e [ _cache[ cache[name];
    if (Think\Storage::has($filename,‘F’)){
    KaTeX parse error: Expected 'EOF', got '\Storage' at position 33: …serialize(Think\̲S̲t̲o̲r̲a̲g̲e̲::read(filename,‘F’));
    c a c h e [ _cache[ cache[name] = $value;
    } else {
    $value = false;
    }
    return $value;
    }

/**

  • 根据PHP各种类型变量生成唯一标识号
  • @param mixed $mix 变量
  • @return string
    */
    function to_guid_string(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (is_object(mix)) {
    return spl_object_hash(KaTeX parse error: Expected 'EOF', got '}' at position 8: mix); }̲ elseif (is_res…mix)) {
    m i x = g e t r e s o u r c e t y p e ( mix = get_resource_type( mix=getresourcetype(mix) . strval($mix);
    } else {
    m i x = s e r i a l i z e ( mix = serialize( mix=serialize(mix);
    }
    return md5($mix);
    }

/**

  • XML编码
  • @param mixed $data 数据
  • @param string $root 根节点名
  • @param string $item 数字索引的子节点名
  • @param string $attr 根节点属性
  • @param string $id 数字索引子节点key转换的属性名
  • @param string $encoding 数据编码
  • @return string
    */
    function xml_encode($data, $root=‘think’, $item=‘item’, $attr=’’, $id=‘id’, KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ if(is_array(attr)){
    a t t r = a r r a y ( ) ; f o r e a c h ( _attr = array(); foreach ( attr=array();foreach(attr as $key => $value) {
    KaTeX parse error: Expected '}', got 'EOF' at end of input: _attr[] = "{key}="{$value}"";
    }
    $attr = implode(’ ', $_attr);
    }
    a t t r = t r i m ( attr = trim( attr=trim(attr);
    a t t r = e m p t y ( attr = empty( attr=empty(attr) ? ‘’ : " {$attr}";
    KaTeX parse error: Can't use function '\"' in math mode at position 25: …"encoding}"?>";
    KaTeX parse error: Expected '}', got 'EOF' at end of input: xml .= "<{root}{$attr}>";
    x m l . = d a t a t o x m l ( xml .= data_to_xml( xml.=datatoxml(data, $item, $id);
    KaTeX parse error: Expected '}', got 'EOF' at end of input: xml .= "root}>";
    return $xml;
    }

/**

  • 数据XML编码
  • @param mixed $data 数据
  • @param string $item 数字索引时的节点名称
  • @param string $id 数字索引key转换为的属性名
  • @return string
    */
    function data_to_xml($data, $item=‘item’, $id=‘id’) {
    $xml = a t t r = ′ ′ ; f o r e a c h ( attr = ''; foreach ( attr=;foreach(data as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(is_numeric(key)){
    $id && KaTeX parse error: Expected '}', got 'EOF' at end of input: attr = " {id}="{$key}"";
    $key = $item;
    }
    KaTeX parse error: Expected '}', got 'EOF' at end of input: xml .= "<{key}{$attr}>";
    x m l . = ( i s a r r a y ( xml .= (is_array( xml.=(isarray(val) || is_object( v a l ) ) ? d a t a t o x m l ( val)) ? data_to_xml( val))?datatoxml(val, $item, $id) : $val;
    KaTeX parse error: Expected '}', got 'EOF' at end of input: xml .= "key}>";
    }
    return $xml;
    }

/**

  • session管理函数
  • @param string|array $name session名称 如果为数组则表示进行session设置
  • @param mixed $value session值
  • @return mixed
    */
    function session( n a m e = ′ ′ , name='', name=,value=’’) {
    p r e f i x = C ( ′ S E S S I O N P R E F I X ′ ) ; i f ( i s a r r a y ( prefix = C('SESSION_PREFIX'); if(is_array( prefix=C(SESSIONPREFIX);if(isarray(name)) { // session初始化 在session_start 之前调用
    if(isset( n a m e [ ′ p r e f i x ′ ] ) ) C ( ′ S E S S I O N P R E F I X ′ , name['prefix'])) C('SESSION_PREFIX', name[prefix]))C(SESSIONPREFIX,name[‘prefix’]);
    if(C(‘VAR_SESSION_ID’) && isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: … session_id(_REQUEST[C(‘VAR_SESSION_ID’)]);
    }elseif(isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: … session_id(name[‘id’]);
    }
    if(‘common’ == APP_MODE){ // 其它模式可能不支持
    ini_set(‘session.auto_start’, 0);
    }
    if(isset( n a m e [ ′ n a m e ′ ] ) ) s e s s i o n n a m e ( name['name'])) session_name( name[name]))sessionname(name[‘name’]);
    if(isset( n a m e [ ′ p a t h ′ ] ) ) s e s s i o n s a v e p a t h ( name['path'])) session_save_path( name[path]))sessionsavepath(name[‘path’]);
    if(isset($name[‘domain’])) ini_set(‘session.cookie_domain’, n a m e [ ′ d o m a i n ′ ] ) ; i f ( i s s e t ( name['domain']); if(isset( name[domain]);if(isset(name[‘expire’])) {
    ini_set(‘session.gc_maxlifetime’, $name[‘expire’]);
    ini_set(‘session.cookie_lifetime’, KaTeX parse error: Expected 'EOF', got '}' at position 23: …xpire']); }̲ if(isset(name[‘use_trans_sid’])) ini_set(‘session.use_trans_sid’, n a m e [ ′ u s e t r a n s s i d ′ ] ? 1 : 0 ) ; i f ( i s s e t ( name['use_trans_sid']?1:0); if(isset( name[usetranssid]?1:0);if(isset(name[‘use_cookies’])) ini_set(‘session.use_cookies’, n a m e [ ′ u s e c o o k i e s ′ ] ? 1 : 0 ) ; i f ( i s s e t ( name['use_cookies']?1:0); if(isset( name[usecookies]?1:0);if(isset(name[‘cache_limiter’])) session_cache_limiter( n a m e [ ′ c a c h e l i m i t e r ′ ] ) ; i f ( i s s e t ( name['cache_limiter']); if(isset( name[cachelimiter]);if(isset(name[‘cache_expire’])) session_cache_expire( n a m e [ ′ c a c h e e x p i r e ′ ] ) ; i f ( i s s e t ( name['cache_expire']); if(isset( name[cacheexpire]);if(isset(name[‘type’])) C(‘SESSION_TYPE’,$name[‘type’]);
    if(C(‘SESSION_TYPE’)) { // 读取session驱动
    $type = C(‘SESSION_TYPE’);
    c l a s s = s t r p o s ( class = strpos( class=strpos(type,’\’)? t y p e : ′ T h i n k S e s s i o n D r i v e r ′ . u c w o r d s ( s t r t o l o w e r ( type : 'Think\\Session\\Driver\\'. ucwords(strtolower( type:ThinkSessionDriver.ucwords(strtolower(type));
    $hander = new KaTeX parse error: Expected 'EOF', got '&' at position 64: … array(&̲hander,“open”),
    array(&KaTeX parse error: Expected 'EOF', got '&' at position 38: … array(&̲hander,“read”),
    array(&KaTeX parse error: Expected 'EOF', got '&' at position 38: … array(&̲hander,“destroy”),
    array(&$hander,“gc”));
    }
    // 启动session
    if(C(‘SESSION_AUTO_START’)) session_start();
    }elseif(’’ === KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(''===name){
    // 获取全部的session
    return $prefix ? S E S S I O N [ _SESSION[ SESSION[prefix] : KaTeX parse error: Expected 'EOF', got '}' at position 16: _SESSION; }̲elseif(0===strp…name,’[’)) { // session 操作
    if(’[pause]‘ n a m e ) / / 暂 停 s e s s i o n s e s s i o n w r i t e c l o s e ( ) ; e l s e i f ( ′ [ s t a r t ] ′ = = name){ // 暂停session session_write_close(); }elseif('[start]'== name)//sessionsessionwriteclose();elseif([start]==name){ // 启动session
    session_start();
    }elseif(’[destroy]’
    $name){ // 销毁session
    KaTeX parse error: Expected 'EOF', got '}' at position 93: …oy(); }̲elseif('[regene…name){ // 重新生成id
    session_regenerate_id();
    }
    }elseif(0===strpos($name,’?’)){ // 检查session
    n a m e = s u b s t r ( name = substr( name=substr(name,1);
    if(strpos(KaTeX parse error: Expected '}', got 'EOF' at end of input: … list(name1, n a m e 2 ) = e x p l o d e ( ′ . ′ , name2) = explode('.', name2)=explode(.,name);
    return p r e f i x ? i s s e t ( prefix?isset( prefix?isset(_SESSION[ p r e f i x ] [ prefix][ prefix][name1][ n a m e 2 ] ) : i s s e t ( name2]):isset( name2]):isset(_SESSION[ n a m e 1 ] [ name1][ name1][name2]);
    }else{
    return p r e f i x ? i s s e t ( prefix?isset( prefix?isset(_SESSION[ p r e f i x ] [ prefix][ prefix][name]):isset( S E S S I O N [ _SESSION[ SESSION[name]);
    }
    }elseif(is_null(KaTeX parse error: Expected '}', got 'EOF' at end of input: …on if(prefix) {
    unset( S E S S I O N [ _SESSION[ SESSION[prefix]);
    }else{
    KaTeX parse error: Expected 'EOF', got '}' at position 30: …ay(); }̲ }elseif(prefix){ // 获取session
    if(strpos(KaTeX parse error: Expected '}', got 'EOF' at end of input: … list(name1, n a m e 2 ) = e x p l o d e ( ′ . ′ , name2) = explode('.', name2)=explode(.,name);
    return isset( S E S S I O N [ _SESSION[ SESSION[prefix][ n a m e 1 ] [ name1][ name1][name2])? S E S S I O N [ _SESSION[ SESSION[prefix][ n a m e 1 ] [ name1][ name1][name2]:null;
    }else{
    return isset( S E S S I O N [ _SESSION[ SESSION[prefix][ n a m e ] ) ? name])? name])?_SESSION[ p r e f i x ] [ prefix][ prefix][name]:null;
    }
    }else{
    if(strpos(KaTeX parse error: Expected '}', got 'EOF' at end of input: … list(name1, n a m e 2 ) = e x p l o d e ( ′ . ′ , name2) = explode('.', name2)=explode(.,name);
    return isset( S E S S I O N [ _SESSION[ SESSION[name1][ n a m e 2 ] ) ? name2])? name2])?_SESSION[ n a m e 1 ] [ name1][ name1][name2]:null;
    }else{
    return isset( S E S S I O N [ _SESSION[ SESSION[name])? S E S S I O N [ _SESSION[ SESSION[name]:null;
    }
    }
    }elseif(is_null(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(strpos(name,’.’)){
    list( n a m e 1 , name1, name1,name2) = explode(’.’, n a m e ) ; i f ( name); if( name);if(prefix){
    unset( S E S S I O N [ _SESSION[ SESSION[prefix][ n a m e 1 ] [ name1][ name1][name2]);
    }else{
    unset( S E S S I O N [ _SESSION[ SESSION[name1][KaTeX parse error: Expected 'EOF', got '}' at position 19: …e2]); }̲ }else{ …prefix){
    unset( S E S S I O N [ _SESSION[ SESSION[prefix][KaTeX parse error: Expected 'EOF', got '}' at position 18: …me]); }̲else{ …_SESSION[KaTeX parse error: Expected 'EOF', got '}' at position 18: …me]); }̲ } }else{…name,’.’)){
    list( n a m e 1 , name1, name1,name2) = explode(’.’, n a m e ) ; i f ( name); if( name);if(prefix){
    S E S S I O N [ _SESSION[ SESSION[prefix][ n a m e 1 ] [ name1][ name1][name2] = $value;
    }else{
    S E S S I O N [ _SESSION[ SESSION[name1][$name2] = KaTeX parse error: Expected 'EOF', got '}' at position 11: value; }̲ }else{ if…prefix){
    S E S S I O N [ _SESSION[ SESSION[prefix][$name] = $value;
    }else{
    S E S S I O N [ _SESSION[ SESSION[name] = $value;
    }
    }
    }
    return null;
    }

/**

  • Cookie 设置、获取、删除
  • @param string $name cookie名称
  • @param mixed $value cookie值
  • @param mixed $option cookie参数
  • @return mixed
    */
    function cookie($name=’’, $value=’’, $option=null) {
    // 默认设置
    c o n f i g = a r r a y ( ′ p r e f i x ′ = > C ( ′ C O O K I E P R E F I X ′ ) , / / c o o k i e 名 称 前 缀 ′ e x p i r e ′ = > C ( ′ C O O K I E E X P I R E ′ ) , / / c o o k i e 保 存 时 间 ′ p a t h ′ = > C ( ′ C O O K I E P A T H ′ ) , / / c o o k i e 保 存 路 径 ′ d o m a i n ′ = > C ( ′ C O O K I E D O M A I N ′ ) , / / c o o k i e 有 效 域 名 ′ s e c u r e ′ = > C ( ′ C O O K I E S E C U R E ′ ) , / / c o o k i e 启 用 安 全 传 输 ′ h t t p o n l y ′ = > C ( ′ C O O K I E H T T P O N L Y ′ ) , / / h t t p o n l y 设 置 ) ; / / 参 数 设 置 ( 会 覆 盖 黙 认 设 置 ) i f ( ! i s n u l l ( config = array( 'prefix' => C('COOKIE_PREFIX'), // cookie 名称前缀 'expire' => C('COOKIE_EXPIRE'), // cookie 保存时间 'path' => C('COOKIE_PATH'), // cookie 保存路径 'domain' => C('COOKIE_DOMAIN'), // cookie 有效域名 'secure' => C('COOKIE_SECURE'), // cookie 启用安全传输 'httponly' => C('COOKIE_HTTPONLY'), // httponly设置 ); // 参数设置(会覆盖黙认设置) if (!is_null( config=array(prefix=>C(COOKIEPREFIX),//cookieexpire=>C(COOKIEEXPIRE),//cookiepath=>C(COOKIEPATH),//cookiedomain=>C(COOKIEDOMAIN),//cookiesecure=>C(COOKIESECURE),//cookiehttponly=>C(COOKIEHTTPONLY),//httponly);//()if(!isnull(option)) {
    if (is_numeric($option))
    $option = array(‘expire’ => o p t i o n ) ; e l s e i f ( i s s t r i n g ( option); elseif (is_string( option);elseif(isstring(option))
    parse_str($option, $option);
    c o n f i g = a r r a y m e r g e ( config = array_merge( config=arraymerge(config, array_change_key_case(KaTeX parse error: Expected 'EOF', got '}' at position 12: option)); }̲ if(!empty(config[‘httponly’])){
    ini_set(“session.cookie_httponly”, 1);
    }
    // 清除指定前缀的所有cookie
    if (is_null(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (empty(_COOKIE))
    return null;
    // 要删除的cookie前缀,不指定则删除config设置的指定前缀
    p r e f i x = e m p t y ( prefix = empty( prefix=empty(value) ? $config[‘prefix’] : v a l u e ; i f ( ! e m p t y ( value; if (!empty( value;if(!empty(prefix)) {// 如果前缀为空字符串将不作处理直接返回
    foreach ($_COOKIE as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: …(0 === stripos(key, KaTeX parse error: Expected '}', got 'EOF' at end of input: … setcookie(key, ‘’, time() - 3600, $config[‘path’], c o n f i g [ ′ d o m a i n ′ ] , config['domain'], config[domain],config[‘secure’], c o n f i g [ ′ h t t p o n l y ′ ] ) ; u n s e t ( config['httponly']); unset( config[httponly]);unset(_COOKIE[$key]);
    }
    }
    }
    return null;
    }elseif(’’ === $name){
    // 获取全部的cookie
    return $COOKIE;
    }
    $name = $config[‘prefix’] . str_replace(’.’, '
    ’, $name);
    if (’’ === KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(isset(_COOKIE[$name])){
    $value = C O O K I E [ _COOKIE[ COOKIE[name];
    if(0===strpos($value,‘think:’)){
    v a l u e = s u b s t r ( value = substr( value=substr(value,6);
    return array_map(‘urldecode’,json_decode(MAGIC_QUOTES_GPC?stripslashes( v a l u e ) : value): value):value,true));
    }else{
    return KaTeX parse error: Expected 'EOF', got '}' at position 17: …alue; }̲ }else{ …value)) {
    setcookie($name, ‘’, time() - 3600, $config[‘path’], c o n f i g [ ′ d o m a i n ′ ] , config['domain'], config[domain],config[‘secure’], c o n f i g [ ′ h t t p o n l y ′ ] ) ; u n s e t ( config['httponly']); unset( config[httponly]);unset(_COOKIE[KaTeX parse error: Expected 'EOF', got '}' at position 28: …除指定cookie }̲ else { …value)){
    v a l u e = ′ t h i n k : ′ . j s o n e n c o d e ( a r r a y m a p ( ′ u r l e n c o d e ′ , value = 'think:'.json_encode(array_map('urlencode', value=think:.jsonencode(arraymap(urlencode,value));
    }
    e x p i r e = ! e m p t y ( expire = !empty( expire=!empty(config[‘expire’]) ? time() + intval( c o n f i g [ ′ e x p i r e ′ ] ) : 0 ; s e t c o o k i e ( config['expire']) : 0; setcookie( config[expire]):0;setcookie(name, $value, $expire, $config[‘path’], c o n f i g [ ′ d o m a i n ′ ] , config['domain'], config[domain],config[‘secure’],$config[‘httponly’]);
    C O O K I E [ _COOKIE[ COOKIE[name] = $value;
    }
    }
    return null;
    }

/**

  • 加载动态扩展文件
  • @var string $path 文件路径
  • @return void
    */
    function load_ext_file(KaTeX parse error: Expected '}', got 'EOF' at end of input: … 加载自定义外部文件 if(files = C(‘LOAD_EXT_FILE’)) {
    f i l e s = e x p l o d e ( ′ , ′ , files = explode(',', files=explode(,,files);
    foreach ($files as $file){
    $file = p a t h . ′ C o m m o n / ′ . path.'Common/'. path.Common/.file.’.php’;
    if(is_file($file)) include KaTeX parse error: Expected 'EOF', got '}' at position 12: file; }̲ } // 加载自定义的动…configs = C(‘LOAD_EXT_CONFIG’)) {
    if(is_string($configs)) c o n f i g s = e x p l o d e ( ′ , ′ , configs = explode(',', configs=explode(,,configs);
    foreach ($configs as k e y = > key=> key=>config){
    f i l e = i s f i l e ( file = is_file( file=isfile(config)? $config : p a t h . ′ C o n f / ′ . path.'Conf/'. path.Conf/.config.CONF_EXT;
    if(is_file(KaTeX parse error: Expected '}', got 'EOF' at end of input: … is_numeric(key)?C(load_config( f i l e ) ) : C ( file)):C( file)):C(key,load_config($file));
    }
    }
    }
    }

/**

  • 获取客户端IP地址
  • @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
  • @param boolean $adv 是否进行高级模式获取(有可能被伪装)
  • @return mixed
    */
    function get_client_ip( t y p e = 0 , type = 0, type=0,adv=false) {
    $type = $type ? 1 : 0;
    static i p = N U L L ; i f ( ip = NULL; if ( ip=NULL;if(ip !== NULL) return i p [ ip[ ip[type];
    if(KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (isset(_SERVER[‘HTTP_X_FORWARDED_FOR’])) {
    $arr = explode(’,’, $_SERVER[‘HTTP_X_FORWARDED_FOR’]);
    p o s = a r r a y s e a r c h ( ′ u n k n o w n ′ , pos = array_search('unknown', pos=arraysearch(unknown,arr);
    if(false !== p o s ) u n s e t ( pos) unset( pos)unset(arr[$pos]);
    i p = t r i m ( ip = trim( ip=trim(arr[0]);
    }elseif (isset($_SERVER[‘HTTP_CLIENT_IP’])) {
    $ip = KaTeX parse error: Expected 'EOF', got '}' at position 33: …ENT_IP']; }̲elseif (isset(_SERVER[‘REMOTE_ADDR’])) {
    $ip = KaTeX parse error: Expected 'EOF', got '}' at position 30: …E_ADDR']; }̲ }elseif (isse…_SERVER[‘REMOTE_ADDR’])) {
    $ip = $_SERVER[‘REMOTE_ADDR’];
    }
    // IP地址合法验证
    l o n g = s p r i n t f ( " long = sprintf("%u",ip2long( long=sprintf("ip));
    $ip = l o n g ? a r r a y ( long ? array( long?array(ip, $long) : array(‘0.0.0.0’, 0);
    return i p [ ip[ ip[type];
    }

/**

  • 发送HTTP状态
  • @param integer $code 状态码
  • @return void
    */
    function send_http_status($code) {
    static s t a t u s = a r r a y ( / / I n f o r m a t i o n a l 1 x x 100 = > ′ C o n t i n u e ′ , 101 = > ′ S w i t c h i n g P r o t o c o l s ′ , / / S u c c e s s 2 x x 200 = > ′ O K ′ , 201 = > ′ C r e a t e d ′ , 202 = > ′ A c c e p t e d ′ , 203 = > ′ N o n − A u t h o r i t a t i v e I n f o r m a t i o n ′ , 204 = > ′ N o C o n t e n t ′ , 205 = > ′ R e s e t C o n t e n t ′ , 206 = > ′ P a r t i a l C o n t e n t ′ , / / R e d i r e c t i o n 3 x x 300 = > ′ M u l t i p l e C h o i c e s ′ , 301 = > ′ M o v e d P e r m a n e n t l y ′ , 302 = > ′ M o v e d T e m p o r a r i l y ′ , / / 1.1303 = > ′ S e e O t h e r ′ , 304 = > ′ N o t M o d i f i e d ′ , 305 = > ′ U s e P r o x y ′ , / / 306 i s d e p r e c a t e d b u t r e s e r v e d 307 = > ′ T e m p o r a r y R e d i r e c t ′ , / / C l i e n t E r r o r 4 x x 400 = > ′ B a d R e q u e s t ′ , 401 = > ′ U n a u t h o r i z e d ′ , 402 = > ′ P a y m e n t R e q u i r e d ′ , 403 = > ′ F o r b i d d e n ′ , 404 = > ′ N o t F o u n d ′ , 405 = > ′ M e t h o d N o t A l l o w e d ′ , 406 = > ′ N o t A c c e p t a b l e ′ , 407 = > ′ P r o x y A u t h e n t i c a t i o n R e q u i r e d ′ , 408 = > ′ R e q u e s t T i m e o u t ′ , 409 = > ′ C o n f l i c t ′ , 410 = > ′ G o n e ′ , 411 = > ′ L e n g t h R e q u i r e d ′ , 412 = > ′ P r e c o n d i t i o n F a i l e d ′ , 413 = > ′ R e q u e s t E n t i t y T o o L a r g e ′ , 414 = > ′ R e q u e s t − U R I T o o L o n g ′ , 415 = > ′ U n s u p p o r t e d M e d i a T y p e ′ , 416 = > ′ R e q u e s t e d R a n g e N o t S a t i s f i a b l e ′ , 417 = > ′ E x p e c t a t i o n F a i l e d ′ , / / S e r v e r E r r o r 5 x x 500 = > ′ I n t e r n a l S e r v e r E r r o r ′ , 501 = > ′ N o t I m p l e m e n t e d ′ , 502 = > ′ B a d G a t e w a y ′ , 503 = > ′ S e r v i c e U n a v a i l a b l e ′ , 504 = > ′ G a t e w a y T i m e o u t ′ , 505 = > ′ H T T P V e r s i o n N o t S u p p o r t e d ′ , 509 = > ′ B a n d w i d t h L i m i t E x c e e d e d ′ ) ; i f ( i s s e t ( _status = array( // Informational 1xx 100 => 'Continue', 101 => 'Switching Protocols', // Success 2xx 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Moved Temporarily ', // 1.1 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', // 306 is deprecated but reserved 307 => 'Temporary Redirect', // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded' ); if(isset( status=array(//Informational1xx100=>Continue,101=>SwitchingProtocols,//Success2xx200=>OK,201=>Created,202=>Accepted,203=>NonAuthoritativeInformation,204=>NoContent,205=>ResetContent,206=>PartialContent,//Redirection3xx300=>MultipleChoices,301=>MovedPermanently,302=>MovedTemporarily,//1.1303=>SeeOther,304=>NotModified,305=>UseProxy,//306isdeprecatedbutreserved307=>TemporaryRedirect,//ClientError4xx400=>BadRequest,401=>Unauthorized,402=>PaymentRequired,403=>Forbidden,404=>NotFound,405=>MethodNotAllowed,406=>NotAcceptable,407=>ProxyAuthenticationRequired,408=>RequestTimeout,409=>Conflict,410=>Gone,411=>LengthRequired,412=>PreconditionFailed,413=>RequestEntityTooLarge,414=>RequestURITooLong,415=>UnsupportedMediaType,416=>RequestedRangeNotSatisfiable,417=>ExpectationFailed,//ServerError5xx500=>InternalServerError,501=>NotImplemented,502=>BadGateway,503=>ServiceUnavailable,504=>GatewayTimeout,505=>HTTPVersionNotSupported,509=>BandwidthLimitExceeded);if(isset(_status[KaTeX parse error: Expected '}', got 'EOF' at end of input: …er('HTTP/1.1 '.code.’ '. s t a t u s [ _status[ status[code]);
    // 确保FastCGI模式下正常
    header(‘Status:’.KaTeX parse error: Double superscript at position 8: code.' '̲._status[$code]);
    }
    }

function think_filter(&$value){
// TODO 其他安全过滤

// 过滤查询特殊字符
if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i',$value)){
    $value .= ' ';
}

}

// 不区分大小写的in_array实现
function in_array_case( v a l u e , value, value,array){
return in_array(strtolower( v a l u e ) , a r r a y m a p ( ′ s t r t o l o w e r ′ , value),array_map('strtolower', value),arraymap(strtolower,array));
}

你可能感兴趣的:(视图)