PHP_PHP チュートリアルの基本的な動作原理から始めましょう
私は以前に .net と Java の開発を行ったことがあり、いくつかの PHP Web サイトも書いたことがあります。3 つの主要なプログラミング言語すべてに触れてきたようです。しかし、プログラミングプロセス全体、特に基礎となるメカニズムについての全体的な理解が不足していると感じることが増えてきました。たとえば、ネットワーク プログラミング、コンパイルの原則、サーバー側、データベース ストレージ エンジンの原則などです。そこで私はいくつかの本を読みました。古典的なものには、apue、unp、tcp/ip、nginx、mysql の innodb ストレージ エンジンが含まれており、jvm について深く理解しています。開発にどのような言語が使用されても、その背後には Linux、シェル、C/C++、nginx サーバー、mysql が存在することが徐々にわかりました。おそらく、これらの核となる原則を習得することによってのみ、プログラマーは核となる競争力を持つことができます。
BAT のバックエンド部分はこれらのコア技術と切り離せないものですが、フロントエンド (ビジネス ロジック層) は異なります。たとえば、淘宝網は主に Java を使用し、百度は主に PHP を使用します。 Tencent はツールを管理するグループであり、主に C/C++ テクノロジーを使用しています。 Tencent の主な製品は、Windows 上のさまざまなクライアント (QQ、インプット メソッド、音楽...最も重要なのはゲーム) とサーバーです。比較的言えば、Web 製品は比較的少数です (QQ Space、Friends Network など)。これらの Web 製品は比較的成熟しており、改良はたまにしか行われません。新しい製品が登場しない限り、人材の需要は大きくありません。
機械学習とビッグデータマイニングの分野における人材の需要は現在比較的強いようですが、関連テクノロジーは依然として Linux と JVM 上に構築される必要があります。一部の企業では Java 人材の需要がさらに高まるでしょう。
C 言語のコンパイルと接続のプロセス、JVM での Java の実行メカニズムを理解したところで、PHP の実行プロセス、メカニズム、原理について突然興味が湧きました。いくつかのブログを見つけて、大まかなアイデアを掴みました。まずそれを下に置きます:
PHP の基本的な動作原理
はじめに
以下のプロセスを見てみましょう:
-
PHP 関連のプロセスを手動で開始したことはありません。PHP は Apache の起動とともに実行されます。PHP は mod_php5.so モジュール (具体的には、SAPI、サーバー アプリケーション プログラミング インターフェイス) を通じて Apache に接続されます。PHP には合計 3 つのモジュールがあります。 、Zend エンジン、および拡張レイヤーは、リクエスト、ファイル ストリーム、エラー処理、およびその他の関連操作を処理するために使用されます。Zend エンジン (ZE) は、ソース ファイルをマシン言語に変換して仮想マシン上で実行するために使用されます。拡張層は、PHP が特定の操作を実行するために使用する関数、ライブラリ、およびストリームのセットです。たとえば、MySQL データベースに接続するには mysql 拡張機能が必要ですが、ZE がプログラムを実行するときに、いくつかの拡張機能に接続する必要がある場合があります。このとき、ZE は制御を拡張機能に渡し、特定のタスクの処理後に制御を返します。 ; 最後に、ZE はプログラムの実行結果を PHP カーネルに返し、PHP カーネルはその結果を SAPI 層に送信し、最終的にブラウザに出力します。
詳しく見る
待ってください、それはそれほど単純ではありません。上記のプロセスは単なる簡略化されたバージョンです。舞台裏で他に何が起こっているのかをもう少し詳しく見てみましょう。
-
Apache が開始されると、PHP インタープリターも開始されます。PHP の開始プロセスには 2 つのステップがあります。最初のステップは、SAPI ライフサイクル全体にわたって有効となるいくつかの環境変数を初期化することです。いくつかの変数が設定されています。
PHPを始める第一歩
最初のステップと 2 番目のステップが何かわからない場合は、心配しないでください。これについては次に詳しく説明します。まず、最初の最も重要なステップを見てみましょう。覚えておくべきことは、操作の最初のステップはリクエストが到着する前に行われるということです。
-
Apache を起動すると、PHP インタープリタも起動し、PHP は各拡張機能の MINIT メソッドを呼び出して、これらの拡張機能を使用可能な状態に切り替えます。 php.ini ファイルでどのような拡張子が開かれているかを確認してください。MINIT は「モジュールの初期化」を意味します。各モジュールは、他のリクエストを処理するための一連の関数、クラス ライブラリなどを定義します。
典型的な MINIT メソッドは次のとおりです:
PHP_MINIT_FUNCTION(拡張機能名){
/* 関数、クラスなどを初期化します */
}
PHP起動ステップ2
-
ページリクエストが発生すると、SAPI レイヤーは制御を PHP レイヤーに引き渡します。したがって、PHP は、このリクエストに応答するために必要な環境変数を設定します。同時に、実行中に生成された変数名と値を保存する変数テーブルも作成します。 PHP は各モジュールの RINIT メソッド、つまり「リクエストの初期化」を呼び出します。典型的な例はセッション モジュールの RINIT です。セッション モジュールが php.ini で有効になっている場合、$_SESSION 変数は初期化され、モジュールの RINIT メソッドが呼び出されたときに関連するコンテンツが読み込まれます。準備プロセスはプログラムの実行の間に自動的に開始されます。
典型的な RINIT メソッドは次のとおりです:
PHP_RINIT_FUNCTION(拡張機能名) {
/* セッション変数の初期化、変数の事前設定、グローバル変数の再定義など */
}
PHP を閉じるための最初のステップ
PHP の起動と同様に、PHP のシャットダウンも 2 つのステップに分かれています:
-
ページが実行されると (ファイルの最後に到達するか、exit または die 関数で終了するかに関係なく)、PHP はクリーンアップ プロセスを開始します。各モジュールの RSHUTDOWN メソッドを順番に呼び出します。 RSHUTDOWN は、プログラムの実行中に生成されたシンボル テーブルをクリアする、つまり各変数の unset 関数を呼び出すために使用されます。
一般的な RSHUTDOWN メソッドは次のとおりです:
PHP_RSHUTDOWN_FUNCTION(拡張機能名) {
/* メモリ管理を行い、最後の PHP 呼び出しなどで使用されたすべての変数の設定を解除します */
}
PHP ステップ 2 を閉じる
最後に、すべてのリクエストが処理され、SAPI を閉じる準備が整い、PHP が 2 番目のステップの実行を開始します。
-
一般的な RSHUTDOWN メソッドは次のとおりです:
PHP_MSHUTDOWN_FUNCTION(拡張機能名) {
/* 空きハンドラーや永続メモリなど */
}
このようにして、PHP のライフサイクル全体が終了します。 「開始ステップ 1」と「終了ステップ 2」は、サーバーからの要求がない場合にのみ実行されることに注意してください。
以下にいくつかの図を使って説明します。
PHP の基本的な動作原理
写真からもわかるように、PHPは下から上まで4層構造になっています
①ゼンドエンジン
Zend は完全に純粋な C で実装されており、PHP コード (字句解析や構文解析などの一連のコンパイル プロセス) を実行可能なオペコード処理に変換し、対応する処理メソッドを実装し、基本的なデータ構造 (ハッシュテーブルなど) を実装します。 、oo)、メモリの割り当てと管理、および外部呼び出しに対応する API メソッドを提供します。これはすべての周辺機能が zend を中心に実装されています。
②拡張機能
zend エンジンを中心に、拡張機能はコンポーネントベースの方法でさまざまな基本サービスを提供します。一般的なさまざまな組み込み関数 (配列シリーズなど) や標準ライブラリなどはすべて拡張機能を通じて実装されます。機能拡張やパフォーマンスの最適化などを実現します(例えば、現在 Tieba で使用されている PHP 中間層やリッチテキスト解析などが拡張の代表的な応用例です)。
③サピ
Sapi の正式名はサーバー アプリケーション プログラミング インターフェイスであり、Sapi は PHP 自体の非常にエレガントで成功した設計です。上位層のアプリケーションは分離され、分離されます。PHP は異なるアプリケーションとの互換性を考慮できなくなり、アプリケーション自体も独自の特性に応じて異なる処理方法を実装できます。後ほどサピ編で紹介します
④上位層アプリケーション
これは、私たちが通常作成する PHP プログラムです。Web サーバーを介して Web アプリケーションを実装したり、コマンド ラインでスクリプト モードで実行したりするなど、さまざまな Sapi メソッドを通じてさまざまなアプリケーション モードを取得できます。
建築思想:
エンジン(Zend)+コンポーネント(ext)モデルにより内部結合を軽減中間層 (sapi) は Web サーバーと php
を分離します
************************************************* * ************************php を車に例えると、
車のフレームワークはphpそのもの
Zend は車のエンジンです
Ext の下にあるさまざまなコンポーネントは車の車輪です
サピは道路に見立てられ、車はさまざまな種類の道路を走行できます
PHP プログラムの実行は、道路を走る車のようなものです。
したがって、次のものが必要です: 優れたエンジン + 適切な車輪 + 正しい滑走路
Apacheとphpの関係
Apache による php の解析は、多くのモジュールの中の php モジュールを通じて完了します。
インストールしたバージョンが Apache2 と Php5 であると仮定すると、Apache のメイン設定ファイル http.conf を編集し、次の行を追加する必要があります。
Unix/Linux 環境の場合:
LoadModule php5_module modules/mod_php5.so
AddType application/x-httpd-php .php
注: modules/mod_php5.so は、X システム環境における mod_php5.so ファイルのインストール場所です。
Windows環境の場合:
LoadModule php5_module d:/php/php5apache2.dll
AddType application/x-httpd-php .php
注: d:/php/php5apache2.dll は、Windows 環境における php5apache2.dll ファイルのインストール場所です。
これら 2 つの構成は、接尾辞が php である今後受信する URL ユーザー リクエストは、処理のために php5_module モジュール (mod_php5.so/php5apache2.dll) を呼び出す必要があることを Apache サーバーに伝えます。
Apache ライフサイクル
Apachのリクエスト処理プロセス
Apacheリクエスト処理ループの詳細説明
Apache リクエスト処理サイクルの 11 段階は何を行うのでしょうか? (これらの 11 のステージは、nginx の 11 の処理ステージに対応しますか? 7mz19O1xLXa0ru49r3Xts6ho7bU09rEx9Cpz+u63NTnvfjI67SmwO3H68fztcTEo7/pw LTLtaOs1eK49r3Xts6/ydLUsbvA+9PDoaM8L3A+CjxwPgogICAgMqGiVVJJIFRyYW5zbGF 0 aW9uvde2ziA8YnI+CiAgICBBcGFjaGXU2rG+vde2zrXE1vfSqrmk1/ejur2rx+vH87XEVV JM07PJ5LW9sb612M7EvP7Ptc2zoaPEo7/pv8nS1NTa1eK917bOsuXI67mz19OjrNa00NDX1 Ly6tcTTs8nkwt+ 8raGjbW9kX2FsaWFzvs3Kx8D708PV4rj2vde2zrmk1/e1xKGjPC9wPgo8cD4KICAgIDOhokhlYWRlciBQYXJzaW5nvde2ziA8YnI+CiAgICBBcGFjaGXU2rG+vde2zrXE1vfSqrmk 1/ejurzssunH6 8fztcTNt7K/oaPTydPaxKO/6b/J0tTU2sfrx/O0psDtwfezzLXEyM66ztK7uPa148nP1rTQ0 mlmvs3Kx8D708PV4rj2vde2zrmk1/e1xKGjPC9wPgo8cD4KICAgIDShokFj Y2VzcyBDb250cm9svde2ziA8YnI+CiagICBBcGFjaGXU2rG+vde2zrXE1vfSqrmk1/ejurj5vt3F5NbDzsS8/rzs sunKx7fx1MrQ7bfDzsrH68fztcTXytS0oaNBcGFjaGW1xLHq17zC37ytyrX P1sHL1MrQ7brNvty++Na4we6ho21vZF9hdXRoel9ob3N0vs3Kx8D708PV4rj2vde2zrmk1/e1xKGjPC9wPgo8cD4 KICAgIDWhokF1dGhlbnRpY2F0aW9uvde2ziA8YnI+CiAgICAgQXBhY2hl1Nqxvr3Xts 61xNb30qq5pNf3o7qwtNXVxeTWw87EvP7J6LaotcSy38LUttTTw7unvfjQ0MjP1qSjrLKiyei2qNPDu 6fD+8f40/Kho8Sjv+m/ydLU1NrV4r3Xts6y5cjrubPX06OsyrXP1tK7uPbIz 9akt723qKGj PC9wPgo8cD4KICAgIDahokF1dGhvcml6YXRpb26917bOIDxicj4KICAgIEFwYWNoZdTasb69 17bOtcTW99KquaTX96O6uPm +3cXk1sPOxLz+vOyy6crHt/HUytDtyM/WpLn9tcTTw7un1rTQ0Mfrx /O1xLLZ1/eho8Sjv+m/ydLU1NrV4r3Xts6y5cjrubPX06OsyrXP1tK7uPbTw7unyKjP3rncwO21xLe9t6ihozwvcD4KPHA+CiAgICA3oaJNSU1FIFR5cGUgQ2hlY2tpbme917bOIDxicj4KICAgIEFwYWNoZdTasb6917bOtcTW99KquaTX96O6uPm+3cfrx/PXytS0tcRNSU1FwODQzbXEz+C52Lnm1PKjrMXQtqi9q9KqyrnTw7XExNrI3bSmwO26r8r9oaOx6te8xKO/6W1vZF9uZWdvdGlhdGlvbrrNbW9kX21pbWXKtc/WwcvV4rj2ubPX06GjPC9wPgo8cD4KICAgIDihokZpeFVwvde2ziA8YnI+CiAgICDV4srH0ru49s2o08O1xL3Xts6jrNTK0O3Eo7/p1NrE2sjdyfqzycb31q7HsKOs1MvQ0MjOus6x2NKqtcS0psDtwfezzKGjus1Qb3N0X1JlYWRfUmVxdWVzdMDgJiMyMDI4NDujrNXiysfSu7j2xNy5u7K2u/HIzrrO0MXPorXEubPX06Os0rLKx9fus6PKudPDtcS5s9fToaM8L3A+CjxwPgogICAgOaGiUmVzcG9uc2W917bOIDxicj4KICAgIEFwYWNoZdTasb6917bOtcTW99KquaTX96O6yfqzybe1u9i/zbuntsu1xMTayN2jrLi61PC4+L/Nu6e2y7eiy83Su7j2x6G1sbXEu9i4tKGj1eK49r3Xts7Kx9X7uPa0psDtwfezzLXEusvQxLK/t9ahozwvcD4KPHA+CiAgICAxMKGiTG9nZ2luZ73Xts4gPGJyPgogICAgQXBhY2hl1Nqxvr3Xts61xNb30qq5pNf3o7rU2rvYuLTS0b6tt6LLzbj4v827p7bL1q6687zHwrzKws7xoaPEo7/pv8nE3NDeuMS78tXfzOa7u0FwYWNoZbXEserXvMjV1r68x8K8oaM8L3A+CjxwPgoxMaGiQ2xlYW5VcL3Xts4gPGJyPgogICAgQXBhY2hl1Nqxvr3Xts61xNb30qq5pNf3o7rH5cDtsb60zsfrx /PKws7xtKbA7c3qs8nWrrrz0sXB9LXEu7e+s6OsscjI587EvP6hosS/wry1xLSmwO278tXfU29ja2V0tcS52LHVtci1yKOs1eLKx0FwYWNoZdK7tM7H68fztKbA7bXE1+668 9K7uPa917bOoaM8L3A +CjxwPgo8c3Ryb25nPkxBTVC83Lm5o7o8L3N0cm9uZz48L3A+CjxwPgo8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140607/201406070911023 27.gif" alt=" b簗 ﹊萟?璅裣i啔a篧conf? {鷌?*??sNa pull?'睝_椐鷌荒铻 Yu?凓i僃i?耉谖y?m4簖喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">html
王興斌のブログ http://blog.csdn.net/wanghao72214/article/details/3916825

ホット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)

ホットトピック









nohup の役割と原理の分析 Unix および Unix 系オペレーティング システムでは、nohup はバックグラウンドでコマンドを実行するためによく使用されるコマンドです。ユーザーが現在のセッションを終了したり、ターミナル ウィンドウを閉じたりしても、コマンドはまだ実行され続けています。この記事では、nohup コマンドの機能と原理を詳しく分析します。 1. nohup の役割: バックグラウンドでのコマンドの実行: nohup コマンドを使用すると、ターミナル セッションを終了するユーザーの影響を受けることなく、長時間実行されるコマンドをバックグラウンドで実行し続けることができます。これは実行する必要があります

Struts フレームワークの原理分析と実践的な調査 JavaWeb 開発で一般的に使用される MVC フレームワークとして、Struts フレームワークは優れた設計パターンとスケーラビリティを備えており、エンタープライズ レベルのアプリケーション開発で広く使用されています。この記事では、Struts フレームワークの原理を分析し、読者がフレームワークをよりよく理解して適用できるように、実際のコード例を使用してそれを検討します。 1. Struts フレームワークの原理の分析 1. MVC アーキテクチャ Struts フレームワークは MVC (Model-View-Con) に基づいています。

MyBatis は、さまざまな Java プロジェクトで広く使用されている人気のある Java 永続層フレームワークです。その中でも、バッチ挿入は、データベース操作のパフォーマンスを効果的に向上させることができる一般的な操作です。この記事では、MyBatis でのバッチ挿入の実装原理を深く調査し、特定のコード例を使用して詳細に分析します。 MyBatis でのバッチ挿入 MyBatis では、通常、バッチ挿入操作は動的 SQL を使用して実装されます。複数の挿入値を含む S を構築することによって

MyBatis は優れた永続層フレームワークであり、XML とアノテーションに基づいたデータベース操作をサポートし、シンプルで使いやすく、豊富なプラグイン メカニズムも提供します。その中でも、ページング プラグインは、よく使用されるプラグインの 1 つです。この記事では、MyBatis ページング プラグインの原理を詳しく説明し、具体的なコード例で説明します。 1. ページング プラグインの原理 MyBatis 自体はネイティブ ページング機能を提供しませんが、プラグインを使用してページング クエリを実装できます。ページング プラグインの原理は主に MyBatis を傍受することです

Linuxシステムのchageコマンドは、ユーザーアカウントのパスワード有効期限を変更するコマンドであり、アカウントの最長使用日と最短使用可能日を変更することもできます。このコマンドはユーザー アカウントのセキュリティ管理において非常に重要な役割を果たし、ユーザー パスワードの使用期間を効果的に制御し、システムのセキュリティを強化します。 CHAGE コマンドの使用方法: CHAGE コマンドの基本構文は次のとおりです: chage [オプション] ユーザー名 たとえば、ユーザー「testuser」のパスワードの有効期限を変更するには、次のコマンドを使用できます。

Linux システムの RPM (RedHatPackageManager) ツールは、システム ソフトウェア パッケージのインストール、アップグレード、アンインストール、管理を行うための強力なツールです。これは RedHatLinux システムで一般的に使用されるソフトウェア パッケージ管理ツールであり、他の多くの Linux ディストリビューションでも使用されます。 RPM ツールの役割は非常に重要で、システム管理者とユーザーがシステム上のソフトウェア パッケージを簡単に管理できるようになります。 RPM を通じて、ユーザーは新しいソフトウェア パッケージを簡単にインストールし、既存のソフトウェアをアップグレードできます。

目次 Astar Dapp ステーキングの原則 ステーキング収益 潜在的なエアドロップ プロジェクトの解体: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap ステーキング戦略と運用 「AstarDapp ステーキング」は今年初めに V3 バージョンにアップグレードされ、ステーキング収益に多くの調整が加えられましたルール。現在、最初のステーキング サイクルが終了し、2 番目のステーキング サイクルの「投票」サブサイクルが始まったばかりです。 「追加報酬」特典を獲得するには、この重要な段階を把握する必要があります (6 月 26 日まで続く予定で、残りは 5 日未満です)。 Astarステーキング収入を詳しく説明します。

Golang の継承メソッドの基本原理と実装方法 Golang では、継承はオブジェクト指向プログラミングの重要な機能の 1 つです。継承を通じて、親クラスのプロパティとメソッドを使用して、コードの再利用と拡張性を実現できます。この記事では、Golang の継承メソッドの基本原理と実装方法を紹介し、具体的なコード例を示します。継承メソッドの基本原則 Golang では、継承は構造体を埋め込むことによって実装されます。構造が別の構造に埋め込まれている場合、埋め込まれた構造は埋め込まれています。
