核心文件加载(core/bone.php)

Source:phpbone.com  Author:IT柏拉图
2013-11-22

    phpbone主张多入口的方式,以便不同的目录可以进行更简单的权限控制、应用区分、二级域名设置等,每个应用入口均需引入 bone/core/bone.php。
     bone.php默认把框架必须的核心类库引入,载入固定配置,对系统初始化,定义“register_shutdown_function”接口、定义__autoload、debug相关接口等,并定义了简单的路由(phpbone框架里所谓的路由和其它框架的并不一样,其它框架花了很大的力度在控制一些访问网址形式等,我们开发项目,网址往往是一开始就应该想好的,这种应该服务器做的事情,何必让php去做呢,完全是没有多少意义的事),phpbone的路由只是简单的把用户请求的参数里 ct 和 ac 变量进行了映射,并且支持简单的权限控制。
    通常我们通过如下的方式去定义一个phpbone应用的入口:

  1. require './bone/core/bone.php'
  2. header('Content-Type: text/html; charset=utf-8'); 
  3.  
  4. $app_config = array
  5.     'app_title' => 'phpbone'
  6.     'app_name' => ''
  7.     'purview_config' => ''
  8.     'session_start' => false 
  9. ); 
  10.  
  11. $app = new bone( $app_config ); 
  12.  
  13. $app->run(); 

    上面的代码通常是放在 appdir/index.php 中,这样声明一个应用,其实配置变量里,app_name 必须是英文,它决定模板文件存放的目录(也就别的框架所说的视图文件的存放位置)。
    如果要实现权限控制,需要像如下的方式定义应用入口:

  1. header('Content-Type: text/html; charset=utf-8'); 
  2. require '../bone/core/bone.php'
  3.  
  4. //权限控制配置 
  5. $purview_config = array
  6.    //自动加载权限检查(此项为true时,自动执行$app->check_purview(1)模式) 
  7.     'auto_check' => false,                          
  8.    //获取用户信息的接口类 
  9.     'user_handler' => 'mod_member',                 
  10.     //获取用户组权限配置的key(针对bone_config) 
  11.     'purview_key' => 'member_df_purview'
  12.     //当前应用池名           
  13.     'pool_name' => 'member'
  14.     //用户登录入口地址                      
  15.     'login_url' => '?ct=index&ac=login',           
  16. ); 
  17.  
  18. //APP信息 
  19. $app_config = array
  20.     'app_title' => 'phpbone member'
  21.     'app_name' => 'member'
  22.     'session_start' => false, 
  23.     'purview_config' => $purview_config
  24. ); 
  25.  
  26.  
  27. tpl::assign('title''phpbone 会员中心'); 
  28.  
  29. $app = new bone( $app_config ); 
  30.  
  31. $app->check_purview( 1 ); 
  32.  
  33. $app->run(); 

    上面就是phpbone定义应用入口的方式,关于权限控制一块,有专门的文档说明,在这里就不多提。
    bone.php根据应用环境不同,对文件加载也有一定的区别,它分cli模式和普通web模式,在cli模式时,主要加载如下类库:
    require PHPBONE.'/core/util.php';
    require PHPBONE.'/core/db.php';
    require PHPBONE.'/core/tpl.php';
    require PHPBONE.'/core/log.php';
    require PHPBONE.'/core/cache.php';
    require PHPBONE.'/core/config.php';
在WEB访问模式,加载类库及内容如下:
    //外部请求(GPF)处理
    require PHPBONE.'/core/req.php';
    req::init();
    //加载核心类库
    require PHPBONE.'/core/util.php';
    require PHPBONE.'/core/db.php';
    require PHPBONE.'/core/tpl.php';
    require PHPBONE.'/core/log.php';
    require PHPBONE.'/core/cache.php';
    require PHPBONE.'/core/config.php';
    //debug设置
    if( in_array( util::get_client_ip(), $GLOBALS['config']['safe_client_ip']) ) {
        $_debug_safe_ip = true;
    } else {
        $_debug_safe_ip = false;
    }
    require PATH_LIBRARY.'/debug/lib_debug.php';
    if( $_debug_safe_ip || DEBUG_MODE === true )
    {
        ini_set('display_errors', 'On');
    }
    else
    {
        ini_set('display_errors', 'Off');
    }
    set_exception_handler('handler_debug_exception');
    set_error_handler('handler_debug_error', E_ALL);
    require PHPBONE.'/core/session.php';
通过对比可以看出,WEB模式比cli模式多加载了处理GET/POST变量的req类和debug接口、session接口。
 

分享到: