您好,欢迎访问一九零五行业门户网

ThinkPHP3.2 加载过程(2)

thinkphp3.2 加载过程(二)
回顾:
上次介绍了 thinkphp 的 index.php入口文件。但只是tp的入口前面的入口(刷boss总是要过好几关才能让你看到 ,不然boss都没面子啊),从index.php最后一行把我们引路到了tp的大门前(thinkphp/thinkphp.php)
// 引入thinkphp入口文件require './thinkphp/thinkphp.php';
本次目标:
查看tp的大门,同时稍微探索一下大门内部的东西
正文:
先上代码
1 // 记录开始运行时间 2 $globals['_begintime'] = microtime(true); 3 // 记录内存初始使用 4 define('memory_limit_on',function_exists('memory_get_usage')); 5 if(memory_limit_on) $globals['_startusemems'] = memory_get_usage(); 6 7 // 版本信息 8 const think_version = '3.2.3'; 9 10 // url 模式定义11 const url_common = 0; //普通模式12 const url_pathinfo = 1; //pathinfo模式13 const url_rewrite = 2; //rewrite模式14 const url_compat = 3; // 兼容模式15 16 // 类文件后缀17 const ext = '.class.php'; 18 19 // 系统常量定义20 defined('think_path') or define('think_path', __dir__.'/');21 defined('app_path') or define('app_path', dirname($_server['script_filename']).'/');22 defined('app_status') or define('app_status', ''); // 应用状态 加载对应的配置文件23 defined('app_debug') or define('app_debug', false); // 是否调试模式24 25 if(function_exists('saeautoloader')){// 自动识别sae环境26 defined('app_mode') or define('app_mode', 'sae');27 defined('storage_type') or define('storage_type', 'sae');28 }else{29 defined('app_mode') or define('app_mode', 'common'); // 应用模式 默认为普通模式 30 defined('storage_type') or define('storage_type', 'file'); // 存储类型 默认为file 31 }32 33 defined('runtime_path') or define('runtime_path', app_path.'runtime/'); // 系统运行时目录34 defined('lib_path') or define('lib_path', realpath(think_path.'library').'/'); // 系统核心类库目录35 defined('core_path') or define('core_path', lib_path.'think/'); // think类库目录36 defined('behavior_path')or define('behavior_path', lib_path.'behavior/'); // 行为类库目录37 defined('mode_path') or define('mode_path', think_path.'mode/'); // 系统应用模式目录38 defined('vendor_path') or define('vendor_path', lib_path.'vendor/'); // 第三方类库目录39 defined('common_path') or define('common_path', app_path.'common/'); // 应用公共目录40 defined('conf_path') or define('conf_path', common_path.'conf/'); // 应用配置目录41 defined('lang_path') or define('lang_path', common_path.'lang/'); // 应用语言目录42 defined('html_path') or define('html_path', app_path.'html/'); // 应用静态目录43 defined('log_path') or define('log_path', runtime_path.'logs/'); // 应用日志目录44 defined('temp_path') or define('temp_path', runtime_path.'temp/'); // 应用缓存目录45 defined('data_path') or define('data_path', runtime_path.'data/'); // 应用数据目录46 defined('cache_path') or define('cache_path', runtime_path.'cache/'); // 应用模板缓存目录47 defined('conf_ext') or define('conf_ext', '.php'); // 配置文件后缀48 defined('conf_parse') or define('conf_parse', ''); // 配置文件解析方法49 defined('addon_path') or define('addon_path', app_path.'addon');50 51 // 系统信息52 if(version_compare(php_version,'5.4.0',' 'c', // 默认控制器获取变量
  'var_action' => 'a', // 默认操作获取变量
值的定义在thinkphp\conf\convention.php
1 /* 系统变量名称设置 */ 2 'var_module' => 'm', // 默认模块获取变量 3 'var_addon' => 'addon', // 默认的插件控制器命名空间变量 4 'var_controller' => 'c', // 默认控制器获取变量 5 'var_action' => 'a', // 默认操作获取变量 6 'var_ajax_submit' => 'ajax', // 默认的ajax提交变量 7 'var_jsonp_handler' => 'callback', 8 'var_pathinfo' => 's', // 兼容模式pathinfo获取变量例如 ?s=/module/action/id/1 后面的参数取决于url_pathinfo_depr 9 'var_template' => 't', // 默认模板切换变量10 'var_auto_string' => false, // 输入变量是否自动强制转换为字符串 如果开启则数组变量需要手动传入变量修饰符获取变量
pathinfo模式
1 const url_pathinfo = 1; //pathinfo模式 该模式是默认模式
url: http://localhost/index.php/home/user/login/var/value/
pathinfo地址的前三个参数分别表示模块/控制器/操作。
说白了就是把普通模式下的几个m c a 变量给省掉 使用斜杠来代替
好处:1.看上去很整齐 2.据说可以提高被搜索引擎抓住的几率哦!!!
当然是斜杠还是别的是可以设置的在 thinkphp\conf\convention.php 文件中可以进行设置
1 'url_pathinfo_depr' => '/', // pathinfo模式下,各参数之间的分割符号
rewrite模式
1 const url_rewrite = 2; //rewrite模式
官方的原话 : rewrite模式是在pathinfo模式的基础上添加了重写规则的支持,可以去掉url地址里面的入口文件index.php,但是需要额外配置web服务器的重写规则。
如何是这样,那么我觉得应该就是 浏览器地址给重写以后在按照pathinfo模式进行解析路由
兼容模式
1 const url_compat = 3; // 兼容模式
url http://localhost/?s=/home/user/login/var/value
看到这个地址 yii的人有木有感觉很熟悉
为什么是s开头呢?是因为配置文件的设置 在 thinkphp\conf\convention.php
1 'var_pathinfo' => 's', // 兼容模式pathinfo获取变量例如 ?s=/module/action/id/1 后面的参数取决于url_pathinfo_depr
修改模式方法
在配置文件 thinkphp\conf\convention.php
1 'url_model' => 1, // url访问模式,可选参数0、1、2、3,代表以下四种模式: 2 // 0 (普通模式); 1 (pathinfo 模式); 2 (rewrite 模式); 3 (兼容模式) 默认为pathinfo 模式
对于以上集中模式个人的小总结:
不管是那个 我们把url中出了模块名称开始前都去掉,就是不同的几种取出模块、控制器、控制器其中的方法名。所以在不配置路由和不使用默认的情况下,我们都能看到这三个参数。
总结:
thinkphp\thinkphp.php文件中 最主要的目的还是定义好各种目录的变量方便以后的调用
如果你发现代码中有一个定义你不知道做什么,如果是_path结尾(关于目录的),就去thinkphp\thinkphp.php中找找,别的那么就去thinkphp\conf\convention.php下找找 基本都能找到
几个思考(个人在整理时候想到的):
1.定义is_cgi ,is_win,is_cli,magic_quotes_gpc干嘛用
1 // 系统信息 2 if(version_compare(php_version,'5.4.0','<')) { 3 ini_set('magic_quotes_runtime',0); 4 define('magic_quotes_gpc',get_magic_quotes_gpc()? true : false); 5 }else{ 6 define('magic_quotes_gpc',false); 7 } 8 define('is_cgi',(0 === strpos(php_sapi,'cgi') || false !== strpos(php_sapi,'fcgi')) ? 1 : 0 ); 9 define('is_win',strstr(php_os, 'win') ? 1 : 0 );10 define('is_cli',php_sapi=='cli'? 1 : 0);
2.为什么我们刚下载的架构不需要输入模块、控制器、方法名也能正常跳出页面。
好了,下一次我们就拿上小米加步枪杀进tp大门
 1 // 应用初始化 2 think\think::start();
其它类似信息

推荐信息