ホームページ  >  記事  >  バックエンド開発  >  PHP の基礎となる原理の例の詳細な説明

PHP の基礎となる原理の例の詳細な説明

小云云
小云云オリジナル
2018-03-14 14:35:401711ブラウズ

私は長い間 LAMP または LNMP を使ってきましたが、ランプはどのように機能するのでしょうか? またはランプはどのように接続されているのでしょうか? 私は通常プログラムを書くだけで、その動作原理についてはほとんど考えません。この記事では主に PHP の基礎となる原理の例を紹介します。説明、皆さんのお役に立てば幸いです。

PHPの基本的な動作原理

PHP の基礎となる原理の例の詳細な説明
図1 PHPの構造

図からわかるように、PHPは下から上まで4層のシステムです

①Zendエンジン

Zendは純粋なCで実装されており、 PHP パーツの中核であり、PHP コード (字句解析、構文解析、その他のコンパイル プロセス) を実行可能なオペコード処理に変換し、対応する処理メソッドを実装し、基本的なデータ構造 (ハッシュテーブル、OO など)、メモリの割り当てと管理を実装し、外部呼び出しには対応する API メソッドが提供されており、すべての周辺機能が zend を中心に実装されています。

②拡張機能

拡張機能は、zend エンジンを中心として、コンポーネントベースの方法でさまざまな基本サービスを提供します。ユーザーは、一般的なさまざまな組み込み関数 (配列シリーズなど)、標準ライブラリなどをすべて拡張機能を通じて実装できます。必要に応じて拡張機能も使用します。 機能拡張やパフォーマンスの最適化などの目的で独自の拡張機能を実装します (たとえば、現在 Tieba で使用されている PHP 中間層やリッチ テキスト解析は、拡張機能の代表的なアプリケーションです)。

③Sapi

Sapiの正式名称はサーバーアプリケーションプログラミングインターフェースであり、これはphpが一連のフック関数を通じて周辺データと対話できるようにするもので、非常にエレガントで成功したphpの設計です。 sapi を通じて成功 PHP 自体を上位層のアプリケーションから切り離して分離することにより、PHP は異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も独自の特性に基づいて異なる処理方法を実装することができます。後ほどsapiの章で紹介します

④上位層アプリケーション

これは私たちが普段書くPHPプログラムです。Webサーバーを介してWebアプリケーションを実装したり、コマンドでスクリプトを使用したりするなど、さまざまなSAPIメソッドを通じてさまざまなアプリケーションモードを取得できます。ラインの走り方など。

アーキテクチャのアイデア:

エンジン (Zend) + コンポーネント (ext) モデルにより、内部結合が軽減されます

中間層 (sapi) が Web サーバーと php を分離します


php が車であれば、

そのフレームワーク車はPHPそのものです

Zendは車のエンジンです

Ext以下のさまざまなコンポーネントは車の車輪です

Sapiは道路とみなすことができ、車はさまざまな種類の道路を走行できます

そしてPHP プログラムの実行 道路を走っているのはただの車です。

したがって、必要なものは次のとおりです: 優れたパフォーマンスのエンジン + 適切なホイール + 正しい滑走路

Apache と php の関係

Apache による php の解析は、多くのモジュールの中の 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

注: Windows環境の場合、d:/php/php5apache2.dllはphp5apache2です。 dll ファイルの場所。

これら 2 つの構成は、サフィックスとして php を使用して今後受信される URL ユーザー リクエストは、処理のために php5_module モジュール (mod_php5.so/php5apache2.dll) を呼び出す必要があることを Apache サーバーに伝えます。

Apacheのライフサイクル

PHP の基礎となる原理の例の詳細な説明
Apacheのリクエスト処理プロセス
PHP の基礎となる原理の例の詳細な説明

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. CleanUp フェーズ

このフェーズにおける Apache の主な作業: ファイルやディレクトリの処理やソケットのクローズなど、このリクエスト トランザクションの完了後に残された環境をクリーンアップします。これが処理される最後のリクエストです。 Apache ステージによる。

LAMPアーキテクチャ:

PHP の基礎となる原理の例の詳細な説明
下から上へ4つの層:

①liunxはオペレーティングシステムの最下層に属します

②apacheサーバーはセカンダリサーバーに属し、LinuxおよびPHPと通信します

③php:に属しますphp_module モジュールを介してサーバー側プログラミング言語に接続 apache

④mysql およびその他の Web サービスに関連付けられています: アプリケーション サービスに属し、PHP の拡張プラグイン モジュールを通じて mysql に関連付けられています

Android システム アーキテクチャ図

を比較してくださいランプと Android のアーキテクチャ図。私は Android を理解していないと思いますが、違いを指摘していただければ幸いです。

PHP の基礎となる原理の例の詳細な説明上から下へ:

Androidアーキテクチャ——————説明————LAMPアーキテクチャ

1. アプリケーション— —-特定のアプリケーション—-Webアプリケーション

2. アプリケーションフレームワーク——Java— ———-PHP言語とライブラリ

3. システムランタイムライブラリ: —仮想マシン——WEBサーバー

⒋Linuxカーネル: —オペレーティングシステム——-ランプアーキテクチャのL

私は長い間LAMPまたはLNMPを使用してきましたでは、ランプはどのように機能するのでしょうか? ランプはどのように接続されているのでしょうか? 私は通常、プログラムを書くだけで、ランプ間の関係について考えることはほとんどありません。図、PHPは下から上への4層システムです

①Zendエンジン

Zendは純粋なCで実装されており、PHPのコア部分であり、PHPコード(字句解析、構文解析、その他のコンパイルプロセス)を実行可能なオペコードに変換します処理と対応する処理メソッドの実装、基本的なデータ構造 (ハッシュテーブル、OO など) の実装、メモリ割り当てと管理、および外部呼び出し用の対応する API メソッドの提供が、すべての周辺機能の中心です。

PHP の基礎となる原理の例の詳細な説明②拡張機能

拡張機能は、zend エンジンを中心として、コンポーネントベースの方法でさまざまな基本サービスを提供します。ユーザーは、一般的なさまざまな組み込み関数 (配列シリーズなど)、標準ライブラリなどをすべて拡張機能を通じて実装できます。必要に応じて拡張機能も使用します。 機能拡張やパフォーマンスの最適化などの目的で独自の拡張機能を実装します (たとえば、現在 Tieba で使用されている PHP 中間層やリッチ テキスト解析は、拡張機能の代表的なアプリケーションです)。

③Sapi

Sapi の正式名はサーバー アプリケーション プログラミング インターフェイスです。これは、php が一連のフック関数を通じて周辺データと対話できるようにする、非常にエレガントで成功した php の設計です。 sapi を通じて成功 PHP 自体を上位層のアプリケーションから切り離して分離することにより、PHP は異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も独自の特性に基づいて異なる処理方法を実装することができます。後ほどsapiの章で紹介します

④上位層アプリケーション

これは私たちが普段書くPHPプログラムです。Webサーバーを介してWebアプリケーションを実装したり、コマンドでスクリプトを使用したりするなど、さまざまなSAPIメソッドを通じてさまざまなアプリケーションモードを取得できます。ラインの走り方など。

アーキテクチャのアイデア:

エンジン (Zend) + コンポーネント (ext) モデルにより、内部結合が軽減されます

中間層 (sapi) が Web サーバーと php を分離します

php が車なら、

車のフレームワークはphpそのものです

Zendは車のエンジンです

Ext以下のさまざまなコンポーネントは車の車輪です

Sapiは道路とみなすことができ、車はさまざまな種類の道路で走行できます道路

PHP プログラムの実行は、道路を走る車のようなものです。

したがって、必要なものは次のとおりです: 優れたパフォーマンスのエンジン + 適切なホイール + 正しい滑走路

Apache と php の関係

Apache による php の解析は、多くのモジュールの中の 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

注: Windows環境の場合、d:/php/php5apache2.dllはphp5apache2です。 dll ファイルの場所。

これら 2 つの構成は、サフィックスとして php を使用して今後受信される URL ユーザー リクエストは、処理のために php5_module モジュール (mod_php5.so/php5apache2.dll) を呼び出す必要があることを Apache サーバーに伝えます。

Apacheのライフサイクル

PHP の基礎となる原理の例の詳細な説明
Apacheのリクエスト処理プロセス
PHP の基礎となる原理の例の詳細な説明

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. CleanUp フェーズ

このフェーズにおける Apache の主な作業: ファイルやディレクトリの処理やソケットのクローズなど、このリクエスト トランザクションの完了後に残された環境をクリーンアップします。これが処理される最後のリクエストです。 Apache ステージによる。

LAMPアーキテクチャ:

PHP の基礎となる原理の例の詳細な説明
下から上へ4つの層:

①liunxはオペレーティングシステムの最下層に属します

②apacheサーバーはセカンダリサーバーに属し、LinuxおよびPHPと通信します

③php:に属しますphp_module モジュールを介して、サーバー側プログラミング言語に接続します。 apache に関連する

④mysql とその他の Web サービス: アプリケーション サービスに属し、PHP の Extensions プラグイン モジュールを通じて mysql に関連付けられています。

Android システム アーキテクチャ図

ランプと Android のアーキテクチャ図を比較すると、ランプ アーキテクチャとある程度似ているように見えます。 Android については理解できませんが、専門家が違いを指摘してくれると幸いです

Android アーキテクチャ——————説明——。 ——LAMPアーキテクチャPHP の基礎となる原理の例の詳細な説明
1. アプリケーション————特定のアプリケーション——–Webアプリケーション

2. アプリケーションフレームワーク——java————-PHP言語とライブラリ

3. システムランタイムライブラリ: —仮想マシン— —WEBサーバー

⒋Linuxカーネル: —オペレーティングシステム— —ランプアーキテクチャの-L

関連する推奨事項:

PHPの基盤となる動作メカニズムと原則の説明

PHPの基盤となる分析: コピーオンについて牛 牛 複数形 win color フォーラム ww7349cow 日本の牛 牛の乳石を書く

php_PHP チュートリアルの基礎となるメカニズムを深く理解する

以上がPHP の基礎となる原理の例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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