php の解析プロセスを理解するには、まず cgi、fastcgi、および php-fpm の関連概念を理解する必要があります。
CGIとは何ですか?
cgi (Common Gateway Interface) は実際にはプロトコルです。CGI プロトコルを実装するプログラムを CGI プログラムと呼ぶことができます。CGI アプリケーションはブラウザと対話でき、データベース API とも対話できます。データベース サーバーなどの外部データ ソースを使用し、データベース サーバーからデータを取得します。 HTML ドキュメントにフォーマットした後、ブラウザに送信するか、ブラウザから取得したデータをデータベースに入れることができます。 php-cgi は、PHP コードを解析するために使用されるプロトコルです。しかし、この協定にはいくつかの欠点があります。
まず第一に、クライアントが PHP スクリプト ファイルを要求するたびに、サーバーはプロセスをフォークし、スクリプトを解析するためにパーサーを呼び出します。スクリプトが実行されると、プロセスは強制終了され、各フォーク プロセスはphp.ini を経由して環境を初期化します。プロセスを再利用できず、php.ini の IO オーバーヘッドが増加します。 PHPの実行速度を制限します。そこで、賢い phper は、より優れた CGI プロトコルを思いつきました。それが、後に登場した fastcgi プロトコルでした。
fastcgi プロトコル
Gu Mingsi は、より高速な CGI プロトコルを考えました。それで、彼はすぐにどこにいますか?
まず第一に、fastcg は元の php-cgi の問題を解決します。これにより、1 つのリクエストが処理された後にプロセスを直接終了するのではなく、複数のリクエストを 1 つのプロセスで処理できるようになります。これにより、php-cgi のパフォーマンスが大幅に向上します。 Webサーバーを改善します。実際、Fastcgi は最初にマスターを起動し、構成ファイルを解析し、実行環境を初期化してから、複数のワーカーを起動します。
リクエストが来ると、マスターはそれをワーカーに渡し、すぐに次のリクエストを受け入れることができます。これにより作業の重複が回避され、当然効率が高くなります。また、十分なワーカーがない場合、マスターは構成に従っていくつかのワーカーを事前に開始して待機することができます。もちろん、アイドル状態のワーカーが多すぎる場合は一部が停止されるため、パフォーマンスが向上し、リソースが節約されます。
php-fpm
PHP-FPM (FastCGI Process Manager: FastCGI Process Manager) は、PHP 5.3.3 より前の php 用の PHPFastCGI マネージャーであり、設計されたパッチ パッケージです。 FastCGI プロセス管理を PHP パッケージに統合します。
PHP5.3.3 より前の PHP を使用している場合は、PHP ソース コードにパッチを適用する必要があります。PHP をコンパイルしてインストールした後に使用できるようになります。実際、php-fpm はインタープリターと考えることができます。以下に示すように、コマンド ps -aux | grep php-fpm を使用して、対応するプロセスのステータスを表示できます:
php-fpm を使用すると、一般的な変更をスムーズに再起動できます。 php.ini の後、php-cgi プロセスはスムーズに再起動できません。つまり、サービスを再起動して新しい設定を再ロードする必要があります。このための php-fpm の処理メカニズムは、新しいワーカーは新しい構成を使用し、既存のワーカーは現在の作業を処理した後に休むことができ、移行をスムーズにするために使用されます。
PHP コード解析プロセス:
1. スキャン (レクシング)、PHP コードを言語フラグメント (トークン) に変換します。
2. 解析し、トークンを単純で意味のある式に変換します。
3. コンパイル、式を Opocdes にコンパイルします。
4. 実行では、オペコードを 1 つずつ順番に実行して、PHP スクリプトの機能を実現します。
APC などの一部のキャッシュにより、PHP がオペコードをキャッシュできるようになりました。この方法では、リクエストが届くたびに最初の 3 つの手順を繰り返す必要がなくなり、パフォーマンスが大幅に向上します。 PHPの実行速度。
推奨チュートリアル: PHP ビデオ チュートリアル
以上がPHP の解析方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。