この記事では主に PHP の動作原理の基本を紹介します。これには一定の参考値があります。今、みんなに共有しています。困っている友達は参考にしてください。
私は最近サーバーを構築し、突然ランプのように感じました。正確にはどのように機能するのでしょうか、またはどのように接続されているのでしょうか?私は普段プログラムを書くだけで、プログラム間の動作原理について考えたことはありません。
図 1 PHP の構造
写真からわかるように、PHP は下から上まで 4 層のシステムです。
①Zend エンジン
Zend は純粋な C で実装されており、PHP のコア部分です。 PHP: PHP コードを統合します 変換 (字句解析や構文解析などの一連のコンパイル プロセス) 実行可能オペコードの処理と対応する処理メソッドの実装、基本的なデータ構造 (ハッシュテーブル、OO など)、メモリの割り当てと管理の実装、および対応する API の提供外部呼び出しのメソッドがすべての中核であり、すべての周辺機能は zend を中心に実装されています。
②拡張機能
zendエンジンを中心に、共通の各種組み込み関数(配列系列など)や標準ライブラリなど、さまざまな基本サービスをコンポーネントベースで提供する拡張機能です。これを実現するために、ユーザーは機能拡張、パフォーマンスの最適化、その他の目的を達成するために、必要に応じて独自の拡張機能を実装することもできます (たとえば、現在 Tieba で使用されている PHP 中間層やリッチ テキスト解析は、拡張機能の典型的なアプリケーションです)。
③Sapi
Sapi の正式名は Server Application Programming Interface で、サーバー アプリケーション プログラミング インターフェイスです。Sapi を使用すると、PHP は一連のフック関数を通じて周辺データと対話できます。これは PHP の非常にエレガントで、成功した設計は、SAPI を通じて PHP 自体を上位層アプリケーションから切り離し、分離することに成功しました。PHP は、異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も、その特性に応じて異なる処理方法を実装できます。これについては、後ほど sapi の章で紹介します。
④上位層アプリケーション
これは、私たちが通常作成する PHP プログラムです。さまざまな sapi メソッドを通じて、さまざまなアプリケーション モードを取得できます。 webserver コマンドラインからスクリプトとして適用、実行など。
アーキテクチャのアイデア:
エンジン (Zend) コンポーネント (ext) モデルは内部結合を削減します
中間層 (sapi) は Web サーバーを分離しますそしてphp
***************************************** ****** ****************************
php が車だったら、
車のフレームワークは php そのものです
Zend は車のエンジンです
Ext の下のさまざまなコンポーネントは車の車輪です
Sapi は道路、車とみなします。 さまざまな種類の道路を走行できます。
そして、php プログラムを実行すると、車が道路を走ることになります。
したがって、必要なのは、優れたパフォーマンスのエンジン、適切な車輪、正しい滑走路
Apache の分析php の場合、多くのモジュールの中の 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 段階では何が行われますか?
1. 読み取りリクエスト後のステージ
通常のリクエスト処理プロセスでは、これはモジュールがフックを挿入できる最初のステージです。この段階は、リクエストの処理を非常に早い段階で開始したいモジュールに利用できます。
2. URI 変換フェーズ
このフェーズにおける Apache の主な作業は、要求された URL をローカル ファイル システムにマッピングすることです。モジュールはこの段階でフックを挿入して、独自のマッピング ロジックを実行できます。 mod_alias はこのフェーズを使用して動作します。
3. ヘッダー解析フェーズ
このフェーズにおける Apache の主な作業: リクエストのヘッダーを確認します。モジュールはリクエスト処理フローのどの時点でもリクエスト ヘッダーをチェックするタスクを実行できるため、このフックが使用されることはほとんどありません。 mod_setenvif はこのフェーズを使用して動作します。
4. アクセス制御フェーズ
このフェーズにおける Apache の主な作業: 要求されたリソースへのアクセスが設定ファイルに従って許可されているかどうかを確認します。 Apache の標準ロジックは、許可ディレクティブと拒否ディレクティブを実装します。 mod_authz_host はこのフェーズを使用して動作します。
5. 認証段階
この段階における Apache の主な作業は、設定ファイルに設定されたポリシーに従ってユーザーを認証し、ユーザー名領域を設定することです。モジュールはこの段階でフックを挿入して、認証方法を実装できます。
6. 認可ステージ
このステージにおける Apache の主な作業は、認証されたユーザーが構成ファイルに従って要求された操作の実行を許可されているかどうかを確認することです。モジュールはこの段階でフックを挿入して、ユーザー権限管理メソッドを実装できます。
7. MIME タイプ チェック フェーズ
このフェーズにおける Apache の主な作業は、要求されたリソースの MIME タイプの関連ルールに基づいて、使用するコンテンツ処理機能を決定することです。標準モジュール mod_negotiation および mod_mime はこのフックを実装します。
8. FixUp ステージ
これは、モジュールがコンテンツ ジェネレーターの前に必要な処理を実行できるようにする一般的なステージです。 Post_Read_Request と同様に、これはあらゆる情報を取得できるフックであり、最も一般的に使用されるフックでもあります。
9. 応答ステージ
このステージにおける Apache の主な作業は、クライアントに返されるコンテンツを生成し、クライアントに適切な応答を送信する責任を負います。この段階はプロセス全体の中核部分です。
10. ロギング段階
この段階における Apache の主な作業は、応答がクライアントに送信された後のトランザクションを記録することです。モジュールは、Apache の標準ログを変更または置き換えることができます。
11. クリーンアップ フェーズ
このフェーズにおける Apache の主な作業: ファイルやディレクトリの処理やソケットのクローズなど、このリクエスト トランザクションの完了後に残された環境をクリーンアップします。 . Apache にとって初めてのこと リクエスト処理の最終段階。
LAMP アーキテクチャ:
下から上への 4 つの層:
①liunx は最下層に属します。オペレーティング システム
②apache サーバー、セカンダリ サーバーに属し、Linux および PHP
③php: サーバー側プログラミング言語に属し、php_module モジュールを通じて Apache と関連付けられます
④Mysql およびその他の Web サービス: アプリケーション サービスに属し、PHP の拡張プラグイン モジュールを通じて mysql に関連付けられます。
比較ランプと Android のアーキテクチャ図、ランプのアーキテクチャに少し似ているようです、Android はわかりませんが、少し似ているように感じます。専門家の方は違いを指摘していただけます。非常に感謝します。
上から下:
Android アーキテクチャ -- ------------説明--------LAMP アーキテクチャ
1. アプリケーション --------特定のアプリケーション ---- -web アプリケーション
2. アプリケーション フレームワーク ----java-------- ----PHP 言語とライブラリ
3. システム ランタイム ライブラリ:-- --仮想マシン--------WEB サーバー
⒋Linux カーネル:---動作中システム-----L
ランプ アーキテクチャにおけるランプとコンピュータ内部の関係
CPU は工場出荷時、ハードディスクは大きな倉庫、メモリは通常の転送センター、仮想メモリは一時転送センターです
Php言語はzendによって機械語にコンパイルされ、cpuが動作します
データベースの動作「Web サイトのボトルネックは、I/O 操作と機械的な動作です。つまり、Web サイトのボトルネックは、ハードディスクへの読み取りと書き込みによって引き起こされます。解決策は、I/O 操作の数を減らすことです。バッファリング技術の使用は、データ操作はメンキャッシュに配置され、それが一定の大きさに達すると、すぐにデータベースに書き込まれます。メンキャッシュは、リレーショナル データではなく、キーと値の関係
# に属します。これもこの概念に基づいて構築されており、キーと値の関係にも属します
頻繁な読み取り操作-----mencache に入れます
もっと読んで、書く量を減らします- ---nosqlに入れてください----- ・読み込み機能が強力です!
上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP ソース コード差別化プラットフォーム MVC 構造の紹介
以上がPHP の仕組みの基本の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。