• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ThinkPHP3.2 加载过程(2)

php 搞代码 3年前 (2022-01-24) 23次浏览 已收录 0个评论

ThinkPHP3.2 加载过程(二)

回顾:

  上次介绍了 ThinkPHP 的 Index.PHP入口文件。但只是TP的入口前面的入口(刷boss总是要过好几关才能让你看到 ,不然boss都没面子啊),从Index.PHP最后一行把我们引路到了TP的大门前(ThinkPHP/ThinkPHP.php)

// 引入ThinkPHP入口文件require './ThinkPHP/ThinkPHP.php';

本次目标:

  查看TP的大门,同时稍微探索一下大门内部的东西

正文:

  先上代码

<span style="color: #008080"> 1</span> <span style="color: #008000">//</span><span style="color: #008000"> 记录开始运行时间</span><span style="color: #008080"> 2</span> <span style="color: #800080">$GLOBALS</span>['_beginTime'] = <span style="color: #008080">microtime</span>(<span style="color: #0000ff">TRUE</span><span style="color: #000000">);</span><span style="color: #008080"> 3</span> <span style="color: #008000">//</span><span style="color: #008000"> 记录内存初始使用</span><span style="color: #008080"> 4</span> <span style="color: #008080">define</span>('MEMORY_LIMIT_ON',<span style="color: #008080">function_exists</span>('memory_get_usage'<span style="color: #000000">));</span><span style="color: #008080"> 5</span> <span style="color: #0000ff">if</span>(MEMORY_LIMIT_ON) <span style="color: #800080">$GLOBALS</span>['_startUseMems'] =<span style="color: #000000"> memory_get_usage();</span><span style="color: #008080"> 6</span> <span style="color: #008080"> 7</span> <span style="color: #008000">//</span><span style="color: #008000"> 版本信息</span><span style="color: #008080"> 8</span> <span style="color: #0000ff">const</span> THINK_VERSION     =   '3.2.3'<span style="color: #000000">;</span><span style="color: #008080"> 9</span> <span style="color: #008080">10</span> <span style="color: #008000">//</span><span style="color: #008000"> URL 模式定义</span><span style="color: #008080">11</span> <span style="color: #0000ff">const</span> URL_COMMON        =   0;  <span style="color: #008000">//</span><span style="color: #008000">普通模式</span><span style="color: #008080">12</span> <span style="color: #0000ff">const</span> URL_PATHINFO      =   1;  <span style="color: #008000">//</span><span style="color: #008000">PATHINFO模式</span><span style="color: #008080">13</span> <span style="color: #0000ff">const</span> URL_REWRITE       =   2;  <span style="color: #008000">//</span><span style="color: #008000">REWRITE模式</span><span style="color: #008080">14</span> <span style="color: #0000ff">const</span> URL_COMPAT        =   3;  <span style="color: #008000">//</span><span style="color: #008000"> 兼容模式</span><span style="color: #008080">15</span> <span style="color: #008080">16</span> <span style="color: #008000">// 类文件后缀</span><span style="color: #008080">17</span> <span style="color: #0000ff">const</span> EXT               =   '.class.php'<span style="color: #000000">; </span><span style="color: #008080">18</span> <span style="color: #008080">19</span> <span style="color: #008000">//</span><span style="color: #008000"> 系统常量定义</span><span style="color: #008080">20</span> <span style="color: #008080">defined</span>('THINK_PATH')   or <span style="color: #008080">define</span>('THINK_PATH',     __DIR__.'/'<span style="color: #000000">);</span><span style="color: #008080">21</span> <span style="color: #008080">defined</span>('APP_PATH')     or <span style="color: #008080">define</span>('APP_PATH',       <span style="color: #008080">dirname</span>(<span style="color: #800080">$_SERVER</span>['SCRIPT_FILENAME']).'/'<span style="color: #000000">);</span><span style="color: #008080">22</span> <span style="color: #008080">defined</span>('APP_STATUS')   or <span style="color: #008080">define</span>('APP_STATUS',     ''); <span style="color: #008000">//</span><span style="color: #008000"> 应用状态 加载对应的配置文件</span><span style="color: #008080">23</span> <span style="color: #008080">defined</span>('APP_DEBUG')    or <span style="color: #008080">define</span>('APP_DEBUG',      <span style="color: #0000ff">false</span>); <span style="color: #008000">//</span><span style="color: #008000"> 是否调试模式</span><span style="color: #008080">24</span> <span style="color: #008080">25</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">function_exists</span>('saeAutoLoader')){<span style="color: #008000">//</span><span style="color: #008000"> 自动识别SAE环境</span><span style="color: #008080">26</span>     <span style="color: #008080">defined</span>('APP_MODE')     or <span style="color: #008080">define</span>('APP_MODE',      'sae'<span style="color: #000000">);</span><span style="color: #008080">27</span>     <span style="color: #008080">defined</span>('STORAGE_TYPE') or <span style="color: #008080">define</span>('STORAGE_TYPE',  'Sae'<span style="color: #000000">);</span><span style="color: #008080">28</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">29</span>     <span style="color: #008080">defined</span>('APP_MODE')     or <span style="color: #008080">define</span>('APP_MODE',       'common'); <span style="color: #008000">//</span><span style="color: #008000"> 应用模式 默认为普通模式    </span><span style="color: #008080">30</span>     <span style="color: #008080">defined</span>('STORAGE_TYPE') or <span style="color: #008080">define</span>('STORAGE_TYPE',   'File'); <span style="color: #008000">//</span><span style="color: #008000"> 存储类型 默认为File    </span><span style="color: #008080">31</span> <span style="color: #000000">}</span><span style="color: #008080">32</span> <span style="color: #008080">33</span> <span style="color: #008080">defined</span>('RUNTIME_PATH') or <span style="color: #008080">define</span>('RUNTIME_PATH',   APP_PATH.'Runtime/');   <span style="color: #008000">//</span><span style="color: #008000"> 系统运行时目录</span><span style="color: #008080">34</span> <span style="color: #008080">defined</span>('LIB_PATH')     or <span style="color: #008080">define</span>('LIB_PATH',       <span style="color: #008080">realpath</span>(THINK_PATH.'Library').'/'); <span style="color: #008000">//</span><span style="color: #008000"> 系统核心类库目录</span><span style="color: #008080">35</span> <span style="color: #008080">defined</span>('CORE_PATH')    or <span style="color: #008080">define</span>('CORE_PATH',      LIB_PATH.'Think/'); <span style="color: #008000">//</span><span style="color: #008000"> Think类库目录</span><span style="color: #008080">36</span> <span style="color: #008080">defined</span>('BEHAVIOR_PATH')or <span style="color: #008080">define</span>('BEHAVIOR_PATH',  LIB_PATH.'Behavior/'); <span style="color: #008000">//</span><span style="color: #008000"> 行为类库目录</span><span style="color: #008080">37</span> <span style="color: #008080">defined</span>('MODE_PATH')    or <span style="color: #008080">define</span>('MODE_PATH',      THINK_PATH.'Mode/'); <span style="color: #008000">//</span><span style="color: #008000"> 系统应用模式目录</span><span style="color: #008080">38</span> <span style="color: #008080">defined</span>('VENDOR_PATH')  or <span style="color: #008080">define</span>('VENDOR_PATH',    LIB_PATH.'Vendor/'); <span style="color: #008000">//</span><span style="color: #008000"> 第三方类库目录</span><span style="color: #008080">39</span> <span style="color: #008080">defined</span>('COMMON_PATH')  or <span style="color: #008080">define</span>('COMMON_PATH',    APP_PATH.'Common/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用公共目录</span><span style="color: #008080">40</span> <span style="color: #008080">defined</span>('CONF_PATH')    or <span style="color: #008080">define</span>('CONF_PATH',      COMMON_PATH.'Conf/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用配置目录</span><span style="color: #008080">41</span> <span style="color: #008080">defined</span>('LANG_PATH')    or <span style="color: #008080">define</span>('LANG_PATH',      COMMON_PATH.'Lang/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用语言目录</span><span style="color: #008080">42</span> <span style="color: #008080">defined</span>('HTML_PATH')    or <span style="color: #008080">define</span>('HTML_PATH',      APP_PATH.'Html/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用静态目录</span><span style="color: #008080">43</span> <span style="color: #008080">defined</span>('LOG_PATH')     or <span style="color: #008080">define</span>('LOG_PATH',       RUNTIME_PATH.'Logs/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用日志目录</span><span style="color: #008080">44</span> <span style="color: #008080">defined</span>('TEMP_PATH')    or <span style="color: #008080">define</span>('TEMP_PATH',      RUNTIME_PATH.'Temp/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用缓存目录</span><span style="color: #008080">45</span> <span style="color: #008080">defined</span>('DATA_PATH')    or <span style="color: #008080">define</span>('DATA_PATH',      RUNTIME_PATH.'Data/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用数据目录</span><span style="color: #008080">46</span> <span style="color: #008080">defined</span>('CACHE_PATH')   or <span style="color: #008080">define</span>('CACHE_PATH',     RUNTIME_PATH.'Cache/'); <span style="color: #008000">//</span><span style="color: #008000"> 应用模板缓存目录</span><span style="color: #008080">47</span> <span style="color: #008080">defined</span>('CONF_EXT')     or <span style="color: #008080">define</span>('CONF_EXT',       '.php'); <span style="color: #008000">//</span><span style="color: #008000"> 配置文件后缀</span><span style="color: #008080">48</span> <span style="color: #008080">defined</span>('CONF_PARSE')   or <span style="color: #008080">define</span>('CONF_PARSE',     '');    <span style="color: #008000">//</span><span style="color: #008000"> 配置文件解析方法</span><span style="color: #008080">49</span> <span style="color: #008080">defined</span>('ADDON_PATH')   or <span style="color: #008080">define</span>('ADDON_PATH',     APP_PATH.'Addon'<span style="color: #000000">);</span><span style="color: #008080">50</span> <span style="color: #008080">51</span> <span style="color: #008000">//</span><span style="color: #008000"> 系统信息</span><span style="color: #008080">52</span> <span style="color: #0000ff">if</span>(<span style="color: #008080">version_compare</span>(<span style="color: #ff00ff">PHP_VERSION</span>,'5.4.0','<'<span style="color: #000000">)) {</span><span style="color: #008080">53</span>     <span style="color: #008080">ini_set</span>('magic_quotes_runtime',0<span style="color: #000000">);</span><span style="color: #008080">54</span>     <span style="color: #008080">define</span>('MAGIC_QUOTES_GPC',<span style="color: #008080">get_magic_quotes_gpc</span>()? <span style="color: #0000ff">true</span> : <span style="color: #0000ff">false</span><span style="color: #000000">);</span><span style="color: #008080">55</span> }<span style="color: #0000ff">else</span><span style="color: #000000">{</span><span style="color: #008080">56</span>     <span style="color: #008080">define</span>('MAGIC_QUOTES_GPC',<span style="color: #0000ff">false</span><span style="color: #000000">);</span><span style="color: #008080">57</span> <span style="color: #000000">}</span><span style="color: #008080">58</span> <span style="color: #008080">define</span>('IS_CGI',(0 === <span style="color: #008080">strpos</span>(PHP_SAPI,'cgi') || <span style="color: #0000ff">false</span> !== <span style="color: #008080">strpos</span>(PHP_SAPI,'fcgi')) ? 1 : 0<span style="color: #000000"> );</span><span style="color: #008080">59</span> <span style="color: #008080">define</span>('IS_WIN',<span style="color: #008080">strstr</span>(<span style="color: #ff00ff">PHP_OS</span>, 'WIN') ? 1 : 0<span style="color: #000000"> );</span><span style="color: #008080">60</span> <span style="color: #008080">define</span>('IS_CLI',PHP_SAPI=='cli'? 1   :   0<span style="color: #000000">);</span><span style="color: #008080">61</span> <span style="color: #008080">62</span> <span style="color: #0000ff">if</span>(!<span style="color: #000000">IS_CLI) {</span><span style="color: #008080">63</span>     <span style="color: #008000">//</span><span style="color: #008000"> 当前文件名</span><span style="color: #008080">64</span>     <span style="color: #0000ff">if</span>(!<span style="color: #008080">defined</span>('_PHP_FILE_'<span style="color: #000000">)) {</span><span style="color: #008080">65</span>         <span style="color: #0000ff">if</span><span style="color: #000000">(IS_CGI) {</span><span style="color: #008080">66</span>             <span style="color: #008000">//</span><span style="color: #008000">CGI/FASTCGI模式下</span><span style="color: #008080">67</span>             <span style="color: #800080">$_temp</span>  = <span style="color: #008080">explode</span>('.php',<span style="color: #800080">$_SERVER</span>['PHP_SELF'<span style="color: #000000">]);</span><span style="color: #008080">68</span>             <span style="color: #008080">define</span>('_PHP_FILE_',    <span style="color: #008080">rtrim</span>(<span style="color: #008080">str_replace</span>(<span style="color: #800080">$_SERVER</span>['HTTP_HOST'],'',<span style="color: #800080">$_temp</span>[0].'.php'),'/'<span style="color: #000000">));</span><span style="color: #008080">69</span>         }<span style="color: #0000ff">else</span><span style="color: #000000"> {</span><span style="color: #008080">70</span>             <span style="color: #008080">define</span>('_PHP_FILE_',    <span style="color: #008080">rtrim</span>(<span style="color: #800080">$_SERVER</span>['SCRIPT_NAME'],'/'<span style="color: #000000">));</span><span style="color: #008080">71</span> <span style="color: #000000">        }</span><span style="color: #008080">72</span> <span style="color: #000000">    }</span><span style="color: #008080">73</span>     <span style="color: #0000ff">if</span>(!<span style="color: #008080">defined</span>('__ROOT__'<span style="color: #000000">)) {</span><span style="color: #008080">74</span>         <span style="color: #800080">$_root</span>  =   <span style="color: #008080">rtrim</span>(<span style="color: #008080">dirname</span>(_PHP_FILE_),'/'<span style="color: #000000">);</span><span style="color: #008080">75</span>         <span style="color: #008080">define</span>('__ROOT__',  ((<span style="color: #800080">$_root</span>=='/' || <span style="color: #800080">$_root</span>=='\\')?'':<span style="color: #800080">$_root</span><span style="color: #000000">));</span><span style="color: #008080">76</span> <span style="color: #000000">    }</span><span style="color: #008080">77</span> <span style="color: #000000">}</span><span style="color: #008080">78</span> <span style="color: #008080">79</span> <span style="color: #008000">//</span><span style="color: #008000"> 加载核心Think类</span><span style="color: #008080">80</span> <span style="color: #0000ff">require</span> CORE_PATH.'Think'.<span style="color: #000000">EXT;</span><span style="color: #008080">81</span> <span style="color: #008000">//</span><span style="color: #008000"> 应用初始化 </span><span style="color: #008080">82</span> Think\Think::start();


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ThinkPHP3.2 加载过程(2)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址