ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP32の読み込み処理(1)

ThinkPHP32の読み込み処理(1)

WBOY
WBOYオリジナル
2016-08-08 09:23:34944ブラウズ

ロードプロセス(公式紹介) :

  1. <span>ユーザー <span>URL<span>request</span></span></span><span>用户<span>URL<span>请求</span></span></span>
  2. <span>调用应用入口文件(通常是网站的<span>index<span>.<span>php<span>)</span></span></span></span></span>
  3. <span>载入框架入口文件(<span>ThinkPHP<span>.<span>php<span>)</span></span></span></span></span>
  4. <span>记录初始运行时间和内存开销</span>
  5. <span>系统常量判断及定义</span>
  6. <span>载入框架引导类(<span>Think<span>Think<span>)并执行<span>Think<span>::<span>start<span>方法进行应用初始化</span></span></span></span></span></span></span></span>
  7. <span>设置错误处理机制和自动加载机制</span>
  8. <span>调用<span>Think<span>Storage<span>类进行存储初始化(由<span>STORAGE_TYPE<span>常量定义存储类型)</span></span></span></span></span></span>
  9. <span>部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤<span>22<span>)</span></span></span>
  10. <span>读取应用模式(由<span>APP_MODE<span>常量定义)的定义文件(以下以普通模式为例说明)</span></span></span>
  11. <span>加载当前应用模式定义的核心文件(普通模式是<span><span>ThinkPHP<span>/<span>Mode<span>/<span>common<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span>
  12. <span>加载惯例配置文件(普通模式是<span><span>ThinkPHP<span>/<span>Conf<span>/<span>convention<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span>
  13. <span>加载应用配置文件(普通模式是<span><span>Application<span>/<span>Common<span>/<span>Conf<span>/<span>config<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>
  14. <span>加载系统别名定义</span>
  15. <span>判断并读取应用别名定义文件(普通模式是<span><span>Application<span>/<span>Common<span>/<span>Conf<span>/<span>alias<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>
  16. <span>加载系统行为定义</span>
  17. <span>判断并读取应用行为定义文件(普通模式是<span><span>Application<span>/<span>Common<span>/<span>Conf<span>/<span>tags<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>
  18. <span>加载框架底层语言包(普通模式是<span><span>ThinkPHP<span>/<span>Lang<span>/<span>zh<span>-<span>cn<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>
  19. <span>如果是部署模式则生成应用编译缓存文件</span>
  20. <span>加载调试模式系统配置文件(<span>ThinkPHP<span>/<span>Conf<span>/<span>debug<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span>
  21. <span>判断并读取应用的调试配置文件(默认是<span><span>Application<span>/<span>Common<span>/<span>Conf<span>/<span>debug<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>
  22. <span>判断应用状态并读取状态配置文件(如果<span>APP_STATUS<span>常量定义不为空的话)</span></span></span>
  23. <span>检测应用目录结构并自动生成(如果<span>CHECK_APP_DIR<span>配置开启并且<span>RUNTIME_PATH<span>目录不存在的情况下)</span></span></span></span></span>
  24. <span>调用<span>Think<span>App<span>类的<span>run<span>方法启动应用</span></span></span></span></span></span>
  25. <span>应用初始化(<span>app_init<span>)标签位侦听并执行绑定行为</span></span></span>
  26. <span>判断并加载动态配置和函数文件</span>
  27. <span>调用<span>Think<span>Dispatcher<span>::<span>dispatch<span>方法进行<span>URL<span>请求调度</span></span></span></span></span></span></span></span>
  28. <span>自动识别兼容<span>URL<span>模式和命令行模式下面的<span>$_SERVER<span>[<span>'PATH_INFO'<span>]参数</span></span></span></span></span></span></span>
  29. <span>检测域名部署以及完成模块和控制器的绑定操作(<span>APP_SUB_DOMAIN_DEPLOY<span>参数开启)</span></span></span>
  30. <span>分析<span>URL<span>地址中的<span>PATH_INFO<span>信息</span></span></span></span></span>
  31. <span>获取请求的模块信息</span>
  32. <span>检测模块是否存在和允许访问</span>
  33. <span> はアプリケーション エントリ ファイル (通常は Web サイトの<span>index<span>.<span>php<span>)</span></span></span></span></span>🎜🎜<span>フレームワークの読み込み中エントリ ファイル (<span>ThinkPHP<span>.<span>php<span>)</span></span></span></span></span>🎜🎜初期実行時間とメモリオーバーヘッドを記録する🎜🎜<span>システム定数の判定と定義</span>🎜🎜<span>ロードフレームワークブートクラス( <span>Think<span>Think<span>) し、<span>Think<span>::<span>start<span> メソッドを実行してアプリケーションを初期化します。</span></span></span> span></span></span></span></span></span>🎜🎜<span>エラー処理メカニズムと自動ロードメカニズムを設定する</span>🎜🎜<span>ストレージの初期化のために <span>Think<span>Storage<span> クラスを呼び出します (ストレージの種類は <span>STORAGE_TYPE<span> 定数によって定義されます)</span></span></span> </span> </span></span>🎜🎜<span>デプロイメント モードでアプリケーション コンパイル キャッシュ ファイルがある場合は、それが直接ロードされます (ステップ <span>22 に直接ジャンプします) <span>)</span> </span></span>🎜🎜<span>アプリケーション モードの定義ファイルを読み込みます (<span>APP_MODE<span> 定数で定義) (以下は例として通常モードを使用します)</span> span></span></span>🎜🎜<span>現在のアプリケーション モードで定義されたコア ファイルをロードします (通常モードは ThinkPHP/モード/共通.php)</span> 🎜🎜<span>従来の設定ファイルをロードします (通常モードは <span><span>ThinkPHP<span>/<span>Conf<span>/<span>convention<span>.<span>php<span>)</span></span></span></span></span> </span></span></span></span> </span>🎜🎜<span>アプリケーション構成ファイルをロードします (通常モードは <span><span>Application<span>) /<span>Common<span>/<span>Conf<span> /<span>config<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span></span>🎜🎜<span>システム エイリアス定義のロード</span>🎜🎜<span>判定・読み込み アプリケーションエイリアス定義ファイルを取得(通常モードは<span><span>Application<span>/<span>Common<span>/<span>Conf/<span>エイリアス<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></span></span> 🎜🎜<span>システム動作定義の読み込み</span>🎜🎜<span>決定アプリケーション動作定義ファイルを読み込みます (通常モードは <span><span> Application<span>/<span>Common<span>/<span>Conf<span>/<span>tags<span>.<span>php) <span>)</span></span></span></span></span></span></span></span></span></span> span></span></span>🎜🎜<span>フレームの最下層をロードします 言語パック (通常モードは <span><span>ThinkPHP<span>/<span>Lang<span>/<span>zh) <span>-<span>cn<span>.<span>php<span>)</span></span></span></span></span></span> span></span></span></span></span></span></span>🎜🎜<span>デプロイメントモードの場合、アプリケーションコンパイルキャッシュファイルを生成します</span> 🎜🎜<span>デバッグ モードのシステム構成ファイルをロードします (<span>ThinkPHP<span>/<span>Conf<span>/<span>debug<span>.<span>php<span>) span></span></span></span></span></span></span></span></span></span>🎜🎜<span>を決定して読み取ります。アプリケーションのデバッグ構成ファイル (デフォルトは <span><span>Application<span>/<span>Common<span>/<span>Conf<span>/<span>debug<span>.<span>php)スパン>スパン>スパン>スパン>スパン>スパン>スパン>スパン>スパン>スパン>スパン>スパン></span></span></span></span></span></span></span></span></span></span></span>🎜🎜<span>アプリケーションのステータスを確認し、ステータス設定ファイルを読み取ります (if <span>APP_STATUS<span>定数定義が空でない場合)</span></span> span></span>🎜🎜<span>アプリケーション ディレクトリ構造を検出し、自動的に生成します (<span>CHECK_APP_DIR<span> 構成が有効であり、<span>RUNTIME_PATH<span> ディレクトリが存在しない場合)</span></span></span></span></span>🎜🎜<span><span>Think<span> の <span>run<span> メソッドを呼び出します。アプリケーションを開始する App<span> クラス</span></span></span></span></span></span>🎜🎜<code><span>アプリケーションの初期化 (app_init<span>) タグ ビットがバインディング アクションをリッスンして実行します</span></span>🎜🎜動的構成ファイルと関数ファイルを決定してロードします 🎜🎜<span><span>Think<span>Dispatcher<span>::<span>dispatch<span> メソッドを呼び出して、<span>URL<span> リクエストのスケジューリングを実行します</span></span></span></span></span></span></span></span>🎜🎜$_SERVER を自動的に識別しますURL モードおよびコマンド ライン モードと互換性のある ['PATH_INFO'] パラメータ span>🎜🎜<span>ドメイン名の展開を検出し、モジュールとコントローラーのバインド操作を完了します (<span>APP_SUB_DOMAIN_DEPLOY <span>パラメーターがオンになっています)</span></span></span>🎜🎜<span><span>URL<span>アドレス</span></span></span>の<span>PATH_INFO<span>情報</span></span>🎜🎜<span>要求さ​​れたモジュール情報を取得します</span>🎜🎜<span>モジュールが存在するかどうかを検出し、アクセスを許可します</span>🎜
  34. <code><span>判断并加载模块配置文件、别名定义、行为定义及函数文件</span>
  35. <span>判断并加载模块的动态配置和函数文件</span>
  36. <span>模块的<span>URL<span>模式判断</span></span></span>
  37. <span>模块的路由检测(<span>URL_ROUTER_ON<span>开启)</span></span></span>
  38. <span>PATH_INFO<span>处理(<span>path_info<span>)标签位侦听并执行绑定行为</span></span></span></span>
  39. <span>URL<span>后缀检测(<span>URL_DENY_SUFFIX<span>以及<span>URL_HTML_SUFFIX<span>处理)</span></span></span></span></span></span>
  40. <span>获取当前控制器和操作,以及<span>URL<span>其他参数</span></span></span>
  41. <span>URL<span>请求调度完成(<span>url_dispatch<span>)标签位侦听并执行绑定行为</span></span></span></span>
  42. <span>应用开始(<span>app_begin<span>)标签位侦听并执行绑定行为</span></span></span>
  43. <span>调用<span>SESSION_OPTIONS<span>配置参数进行<span>Session<span>初始化(如果不是命令行模式)</span></span></span></span></span>
  44. <span>根据请求执行控制器方法</span>
  45. <span>如果控制器不存在则检测空控制器是否存在</span>
  46. <span>控制器开始(<span>action_begin<span>)标签位侦听并执行绑定行为</span></span></span>
  47. <span>默认调用系统的<span>ReadHtmlCache<span>行为读取静态缓存(<span>HTML_CACHE_ON<span>参数开启)</span></span></span></span></span>
  48. <span>判断并调用控制器的<span>_initialize<span>初始化方法</span></span></span>
  49. <span>判断操作方法是否存在,如果不存在则检测是否定义空操作方法</span>
  50. <span>判断前置操作方法是否定义,有的话执行</span>
  51. <span>Action<span>参数绑定检测,自动匹配操作方法的参数</span></span>
  52. <span>如果有模版渲染(调用控制器<span>display<span>方法)</span></span></span>
  53. <span>视图开始(<span>view_begin<span>)标签位侦听并执行绑定行为</span></span></span>
  54. <span>调用<span>Think<span>View<span>的<span>fetch<span>方法解析并获取模版内容</span></span></span></span></span></span>
  55. <span>自动识别当前主题以及定位模版文件</span>
  56. <span>视图解析(<span>view_parse<span>)标签位侦听并执行绑定行为</span></span></span>
  57. <span>默认调用内置<span>ParseTemplate<span>行为解析模版(普通模式下面)</span></span></span>
  58. <span>模版引擎解析模版内容后生成模版缓存</span>
  59. <span>模版过滤替换(<span>template_filter<span>)标签位侦听并执行绑定行为</span></span></span>
  60. <span>默认调用系统的<span>ContentReplace<span>行为进行模版替换</span></span></span>
  61. <span>输出内容过滤(<span>view_filter<span>)标签位侦听并执行绑定行为</span></span></span>
  62. <span>默认调用系统的<span>WriteHtmlCache<span>行为写入静态缓存(<span>HTML_CACHE_ON<span>参数开启)</span></span></span></span></span>
  63. <span>调用<span>Think<span>View<span>类的<span>render<span>方法输出渲染内容</span></span></span></span></span></span>
  64. <span>视图结束(<span>view_end<span>)标签位侦听并执行绑定行为</span></span></span>
  65. <span>判断后置操作方法是否定义,有的话执行</span>
  66. <span>控制器结束(<span>action_end<span>)标签位侦听并执行绑定行为</span></span></span>
  67. <span>应用结束(<span>app_end<span>)标签位侦听并执行绑定行为</span></span></span>
  68. <span>执行系统的<span>ShowPageTrace<span>行为(<span>SHOW_PAGE_TRACE<span>参数开启并且不是<span>AJAX<span>请求)</span></span></span></span></span></span></span>
  69. <span>日志信息存储写入</span>モジュール構成ファイル、エイリアス定義、動作定義、関数ファイルを決定してロードします

<span>モジュールの動的構成ファイルと関数ファイルを決定してロードします</span>

モジュールの

URL

モード判定

🎜🎜モジュールのルート検出(🎜URL_ROUTER_ON🎜on)🎜🎜🎜🎜🎜🎜PATH_INFO🎜処理(🎜)パス情報🎜 ) タグビットがバインド動作をリッスンして実行します 🎜🎜🎜🎜🎜🎜🎜URL🎜サフィックス検出 (🎜URL_DENY_SUFFIX🎜 および 🎜URL_HTML_SUFFIX🎜 処理) 🎜🎜🎜🎜🎜🎜 code> 🎜🎜🎜現在のコントローラとアクション、および🎜URL🎜その他のパラメータを取得します🎜🎜🎜🎜🎜🎜URL🎜リクエストディスパッチ完了(🎜url_dispatch🎜)タグビットをリッスンしてバインディング動作を実行します🎜🎜🎜🎜🎜🎜<code>🎜アプリケーション開始 (🎜app_begin🎜) タグビットは、バインドされた動作をリッスンして実行します 🎜🎜🎜🎜🎜🎜は、🎜SESSION_OPTIONS🎜設定パラメータを呼び出します 🎜Session🎜の初期化を実行します(コマンドラインモードでない場合) 🎜🎜🎜🎜🎜🎜🎜🎜リクエストに応じてコントローラメソッドを実行する 🎜🎜🎜🎜コントローラが存在しない場合 空のコントローラが存在するかどうかを検出する 🎜 🎜🎜🎜コントローラーは開始 (🎜action_begin🎜) タグビットをリッスンし、バインディング動作を実行します 🎜🎜🎜🎜🎜🎜デフォルトの呼び出しシステム 🎜ReadHtmlCache🎜 動作は静的データを読み取りますキャッシュ(🎜HTML_CACHE_ON🎜パラメーターがオンになっています)🎜🎜🎜🎜🎜🎜🎜🎜ジュッジを呼び出して、コントローラーの🎜_initialize🎜Initialization方法を呼び出します🎜操作メソッドが存在しない場合は、空の操作メソッドが定義されているかどうかを確認します🎜🎜🎜🎜事前操作メソッドが定義されているかどうかを確認します🎜。 🎜 🎜🎜Action🎜パラメータバインディング検出、操作メソッドのパラメータを自動的に照合🎜🎜🎜🎜🎜テンプレートレンダリングがある場合(コントローラ🎜display🎜メソッドの呼び出し)🎜🎜🎜 🎜🎜<code>🎜View start (🎜view_begin🎜) タグビットはバインディング動作をリッスンして実行します 🎜🎜🎜🎜🎜🎜は🎜Think🎜View🎜の🎜fetch🎜メソッドを呼び出して解析しますテンプレートコンテンツを取得します🎜🎜🎜🎜🎜🎜🎜🎜🎜現在のテーマを自動的に識別し、テンプレートファイルを見つけます🎜🎜🎜🎜View parsing (🎜view_parse🎜) タグビットはバインディングをリッスンして実行します 定義された動作 🎜🎜🎜🎜🎜🎜 デフォルトで組み込みの 🎜ParseTemplate🎜動作解析テンプレートを呼び出します (通常モードで) 🎜🎜🎜🎜🎜 🎜テンプレート エンジンは、テンプレート コンテンツを解析した後にテンプレートを生成します キャッシュ 🎜🎜🎜🎜テンプレート フィルター置換 (🎜template_filter🎜) タグ ビットがリッスンしてバインディング動作を実行します 🎜🎜🎜🎜🎜🎜Default はシステムの 🎜ContentReplace🎜 動作を呼び出します テンプレート置換を実行します🎜🎜🎜🎜🎜🎜出力コンテンツ フィルタリング (🎜view_filter🎜) タグ ビットをリッスンしてバインディング動作を実行します🎜🎜🎜🎜🎜 🎜デフォルトはシステムの🎜WriteHtmlCacheを呼び出します🎜動作は静的キャッシュに書き込みます(🎜HTML_CACHE_ON🎜パラメータがオンになっています)🎜🎜🎜🎜🎜🎜🎜🎜の🎜render🎜メソッドを呼び出しますレンダリングコンテンツを出力する🎜Think🎜View🎜クラス🎜🎜🎜 🎜🎜 🎜🎜🎜🎜View end (🎜view_end🎜)タグはバインディング動作をリッスンして実行します🎜🎜🎜🎜🎜🎜事後操作メソッドが定義されているかどうかを判断し、その後、🎜🎜🎜🎜Controller end (🎜action_end🎜)タグビットをリッスンしてバインドされたアクションを実行します🎜🎜🎜🎜🎜 🎜App end (🎜app_end🎜) タグビットはバインディング動作をリッスンして実行します 🎜🎜🎜🎜🎜🎜 システムの 🎜ShowPageTrace🎜 動作を実行します (🎜SHOW_PAGE_TRACE🎜 パラメータがオンになっており、は🎜AJAX🎜リクエストではありません)🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>🎜ログ情報の保存と書き込み🎜🎜🎜🎜🎜コード:🎜🎜🎜 1.エントリーファイル(インデックス) .php)🎜🎜
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);

// 定义应用目录
define('APP_PATH','./Application/');

// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
🎜🎜 機能 1. デバッグモードかどうかを設定します (デバッグモード、つまり APP_DEBUG が True の場合、最後にコンパイルされた ~runtime.php は読み込まれません。開発状況では、これをお勧めします)デバッグモードを開始します) 🎜🎜 2. APP_PATH のパスを定義します 🎜

3. これが最も重要でもあります。ここから、複雑だが単純な TP フレームワークの旅が正式に始まります。良い機材を持っていない人は、自分の機材を持ち込んで TP フレームワークを試してみましょう。

TPのソースコードに従い、TPに一切手を加えずにページがどのように表示されるかを紹介します

( PS: TPフレームワークを学ぶのは初めてで、PHPも学び始めたばかりなので、ここに私自身の考えを少し書きます。間違いがある場合は、ご指摘いただければ幸いです。

以上、ThinkPHP32 のロード処理 (1) をさまざまな側面を含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。