ThinkPHP32の読み込み処理(1)
ロードプロセス(公式紹介) :
-
<span>ユーザー <span>URL<span>request</span></span></span>
<span>用户<span>URL<span>请求</span></span></span>
<span>调用应用入口文件(通常是网站的<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>
<span>载入框架引导类(<span>Think<span>Think<span>)并执行<span>Think<span>::<span>start<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><span>ThinkPHP<span>/<span>Mode<span>/<span>common<span>.<span>php<span>)</span></span></span></span></span></span></span></span></span></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>alias<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>tags<span>.<span>php<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>ThinkPHP<span>/<span>Conf<span>/<span>debug<span>.<span>php<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></span>
<span>判断应用状态并读取状态配置文件(如果<span>APP_STATUS<span>常量定义不为空的话)</span></span></span>
<span>检测应用目录结构并自动生成(如果<span>CHECK_APP_DIR<span>配置开启并且<span>RUNTIME_PATH<span>目录不存在的情况下)</span></span></span></span></span>
<span>调用<span>Think<span>App<span>类的<span>run<span>方法启动应用</span></span></span></span></span></span>
<span>应用初始化(<span>app_init<span>)标签位侦听并执行绑定行为</span></span></span>
<span>判断并加载动态配置和函数文件</span>
<span>调用<span>Think<span>Dispatcher<span>::<span>dispatch<span>方法进行<span>URL<span>请求调度</span></span></span></span></span></span></span></span>
<span>自动识别兼容<span>URL<span>模式和命令行模式下面的<span>$_SERVER<span>[<span>'PATH_INFO'<span>]参数</span></span></span></span></span></span></span>
<span>检测域名部署以及完成模块和控制器的绑定操作(<span>APP_SUB_DOMAIN_DEPLOY<span>参数开启)</span></span></span>
<span>分析<span>URL<span>地址中的<span>PATH_INFO<span>信息</span></span></span></span></span>
<span>获取请求的模块信息</span>
<span>检测模块是否存在和允许访问</span>
<code><span>判断并加载模块配置文件、别名定义、行为定义及函数文件</span>
<span>判断并加载模块的动态配置和函数文件</span>
<span>模块的<span>URL<span>模式判断</span></span></span>
<span>模块的路由检测(<span>URL_ROUTER_ON<span>开启)</span></span></span>
<span>PATH_INFO<span>处理(<span>path_info<span>)标签位侦听并执行绑定行为</span></span></span></span>
<span>URL<span>后缀检测(<span>URL_DENY_SUFFIX<span>以及<span>URL_HTML_SUFFIX<span>处理)</span></span></span></span></span></span>
<span>获取当前控制器和操作,以及<span>URL<span>其他参数</span></span></span>
<span>URL<span>请求调度完成(<span>url_dispatch<span>)标签位侦听并执行绑定行为</span></span></span></span>
<span>应用开始(<span>app_begin<span>)标签位侦听并执行绑定行为</span></span></span>
<span>调用<span>SESSION_OPTIONS<span>配置参数进行<span>Session<span>初始化(如果不是命令行模式)</span></span></span></span></span>
<span>根据请求执行控制器方法</span>
<span>如果控制器不存在则检测空控制器是否存在</span>
<span>控制器开始(<span>action_begin<span>)标签位侦听并执行绑定行为</span></span></span>
<span>默认调用系统的<span>ReadHtmlCache<span>行为读取静态缓存(<span>HTML_CACHE_ON<span>参数开启)</span></span></span></span></span>
<span>判断并调用控制器的<span>_initialize<span>初始化方法</span></span></span>
<span>判断操作方法是否存在,如果不存在则检测是否定义空操作方法</span>
<span>判断前置操作方法是否定义,有的话执行</span>
<span>Action<span>参数绑定检测,自动匹配操作方法的参数</span></span>
<span>如果有模版渲染(调用控制器<span>display<span>方法)</span></span></span>
<span>视图开始(<span>view_begin<span>)标签位侦听并执行绑定行为</span></span></span>
<span>调用<span>Think<span>View<span>的<span>fetch<span>方法解析并获取模版内容</span></span></span></span></span></span>
<span>自动识别当前主题以及定位模版文件</span>
<span>视图解析(<span>view_parse<span>)标签位侦听并执行绑定行为</span></span></span>
<span>默认调用内置<span>ParseTemplate<span>行为解析模版(普通模式下面)</span></span></span>
<span>模版引擎解析模版内容后生成模版缓存</span>
<span>模版过滤替换(<span>template_filter<span>)标签位侦听并执行绑定行为</span></span></span>
<span>默认调用系统的<span>ContentReplace<span>行为进行模版替换</span></span></span>
<span>输出内容过滤(<span>view_filter<span>)标签位侦听并执行绑定行为</span></span></span>
<span>默认调用系统的<span>WriteHtmlCache<span>行为写入静态缓存(<span>HTML_CACHE_ON<span>参数开启)</span></span></span></span></span>
<span>调用<span>Think<span>View<span>类的<span>render<span>方法输出渲染内容</span></span></span></span></span></span>
<span>视图结束(<span>view_end<span>)标签位侦听并执行绑定行为</span></span></span>
<span>判断后置操作方法是否定义,有的话执行</span>
<span>控制器结束(<span>action_end<span>)标签位侦听并执行绑定行为</span></span></span>
<span>应用结束(<span>app_end<span>)标签位侦听并执行绑定行为</span></span></span>
<span>执行系统的<span>ShowPageTrace<span>行为(<span>SHOW_PAGE_TRACE<span>参数开启并且不是<span>AJAX<span>请求)</span></span></span></span></span></span></span>
-
<span>日志信息存储写入</span>
モジュール構成ファイル、エイリアス定義、動作定義、関数ファイルを決定してロードします
<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>
🎜<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';
3. これが最も重要でもあります。ここから、複雑だが単純な TP フレームワークの旅が正式に始まります。良い機材を持っていない人は、自分の機材を持ち込んで TP フレームワークを試してみましょう。
TPのソースコードに従い、TPに一切手を加えずにページがどのように表示されるかを紹介します
( PS: TPフレームワークを学ぶのは初めてで、PHPも学び始めたばかりなので、ここに私自身の考えを少し書きます。間違いがある場合は、ご指摘いただければ幸いです。
以上、ThinkPHP32 のロード処理 (1) をさまざまな側面を含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
