ホームページ >バックエンド開発 >PHPチュートリアル >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を始める第一歩
最初のステップと 2 番目のステップが何かわからない場合は、心配しないでください。これについては次に詳しく説明します。まず、最初の最も重要なステップを見てみましょう。覚えておくべきことは、操作の最初のステップはリクエストが到着する前に行われるということです。
典型的な MINIT メソッドは次のとおりです:
PHP_MINIT_FUNCTION(拡張機能名){
/* 関数、クラスなどを初期化します */
}
PHP起動ステップ2
典型的な RINIT メソッドは次のとおりです:
PHP_RINIT_FUNCTION(拡張機能名) {
/* セッション変数の初期化、変数の事前設定、グローバル変数の再定義など */
}
PHP を閉じるための最初のステップ
PHP の起動と同様に、PHP のシャットダウンも 2 つのステップに分かれています:
一般的な RSHUTDOWN メソッドは次のとおりです:
PHP_RSHUTDOWN_FUNCTION(拡張機能名) {
/* メモリ管理を行い、最後の PHP 呼び出しなどで使用されたすべての変数の設定を解除します */
}
PHP ステップ 2 を閉じる
最後に、すべてのリクエストが処理され、SAPI を閉じる準備が整い、PHP が 2 番目のステップの実行を開始します。
PHP_MSHUTDOWN_FUNCTION(拡張機能名) {
/* 空きハンドラーや永続メモリなど */
}
このようにして、PHP のライフサイクル全体が終了します。 「開始ステップ 1」と「終了ステップ 2」は、サーバーからの要求がない場合にのみ実行されることに注意してください。
以下にいくつかの図を使って説明します。
PHP の基本的な動作原理
図1 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 プログラムの実行は、道路を走る車のようなものです。
したがって、次のものが必要です: 優れたエンジン + 適切な車輪 + 正しい滑走路
最終的に PHP を Apache システムに統合するには、Apache に必要な設定をいくつか行う必要があります。ここでは、php の SAPI 動作モード mod_php5 を例に説明します。SAPI の概念については、後で詳しく説明します。
インストールしたバージョンが 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リクエスト処理ループの詳細説明
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