この記事では主に PHP の実行プロセスと関連する概念を紹介します。これには一定の参考価値があります。ここで共有します。必要な友人は参照してください。
まず、PHP プログラムを実行するために必要なサポートを見てみましょう。すべての出発点は、プログラマから PHP を書き始めることが合理的であるということです。そのため、アプリケーション レベルの PHP スクリプト ファイル (Composer/include 内のさまざまなサードパーティ PHP コードを含む) が必要です。スクリプト ファイルは実行前に解析してコンパイルする必要があるため、PHP 仮想マシン (通常は Zend エンジン) も必要です。さらに、PHP スクリプトは複数の拡張機能で関数やクラスを使用するため、拡張機能 (公式拡張機能、PECL 拡張機能、およびユーザー作成の拡張機能を含む) がほぼ必要になります。また、PHP プログラムは外部とのやり取り(コマンドラインからパラメータを取得したり、Web サーバーからリクエスト情報を取得したりするなど)が必要ですが、この層は SAPI を担当するため、SAPI も必要です。
上記を要約すると、PHP プログラムのアーキテクチャは上から順に、アプリケーション層、SAPI 層、拡張層、Zend エンジンの 4 つの層で構成されます。アーキテクチャ上の関係を次の図に示します。
(画像ソース: http://www.nowmagic.net/libr...)
SAPI レイヤーは、比較的知られていない人もいるかもしれません。 SAPI は、上位層のアプリケーションを実際の動作環境から分離するための統合されたインターフェイスのセットを提供します。ユーザーが作成した PHP ファイルは、コマンド ラインまたは Apache httpd または FPM を使用して実行できます。その背後にあるサポート作業は SAPI によって提供されますが、開発者はそれを知りません。 SAPI を通じて、PHP スクリプト層は特定の実行環境についてあまり考慮する必要がなく、PHP 自体により SAPI が独自の特性に基づいた独自の実装を提供できるようになります。
さまざまな SAPI 実装の違いはさておき、PHP プログラムの実行プロセスは次のように簡単に要約できます。開始、Zend エンジンとコア コンポーネントの初期化;
拡張機能の初期化 (MINIT);
リクエストの受信、拡張機能のアクティブ化 (RINIT);
PHP スクリプトを解析して実行します;
リクエストが終了し、拡張機能が非アクティブ化されます (RSHUTDOWN);
拡張機能のアンインストール (MSHUTDOWN);
プログラムのシャットダウン
345 を除き、残りの手順は全体で 1 回だけ実行されます。 SAPI のライフサイクル。 CGI/CLI モードでは、345 は 1 回だけ実行されます。
がどのような状態であっても、無駄であり、スクリプトが実行されるとすぐにリソースが解放されます。
exit/die スクリプトの実行を終了しますが、これは必ずしもプロセスの終了を意味するわけではありません。スクリプトがコンパイルされた後、メモリ内に常駐し、RINIT と RSHUTDOWN を繰り返し実行することはありません。これは、他の動作モードと比較して CLI フレームワークのパフォーマンスが向上する点です。 SAPI ライフサイクルの各段階の詳細については、『PHP コアの詳細』という書籍を参照してください。
CGI、FastCGI、PHP-FPM など
CGI/FastCGI/php-cgi および PHP-FPM は、PHP 開発者を簡単に混乱させ、混乱させる可能性のあるいくつかの概念です。これらの概念間の関係は次のとおりです:
CGI/FastCGI:网关协议,与语言无关,所以与PHP关系也不大。两者的区别是FastCGI可以独立于web服务器,运行FastCGI协议的程序变成web服务器的内容提供方(上游)。另外与web服务器解耦后,用FastCGI协议交互的进程具有性能好、安全稳定、支持分布式等优点; php-cgi:实现FastCGI协议的PHP解析器,不能平滑重启和热加载; FPM:PHP官方的FastCGI进程管理器,可执行程序为php-fpm;支持平滑重启、热加载,运行稳定;其管理对象不是php-cgi进程,两者没什么关系。
ウェブサーバー。一般的な Apache httpd および Nginx、
SAPI。一般的なものは、apache2handler、cli、fpm-fcgi;
プロトコルです。記事で言及されている CGI および FastCGI;
プログラム。つまり、php-cgi と php-fpm です。
Web サーバーの方がほとんどの人にとって馴染みがあるため、他の概念との関係について説明します。Apache httpd を使用する場合、90% 以上の時間で PHP スクリプトが実行されます。これはモジュール方式であるため、SAPI の apache2handler に関連しており、他の概念 (CGI や FastCGI プロトコルのいずれにも) とは何の関係もありません。Nginx を使用する場合、リクエストは 90% の確率で FastCGI プロトコルを通じて FPM に転送されるため、 SAPI の fpm-fcgi とプロトコル FastCGI およびプログラムの php-fpm に関連するものは 3 つの概念に関連しており、他の概念とは何の関係もありません。
この記事では、PHP プログラムのアーキテクチャと実行プロセスを簡単に説明し、混同されやすい概念をいくつか紹介します。
上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP コンテナー Pimple の実行プロセスの分析以上がPHP の実行プロセスと関連概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。