この記事では主にphpの4つの一般的な実行モードを紹介します。この記事ではCGI、FastCGI、APACHE2HANDLER、CLIの4つの実行モードについて説明します。必要な方は参考にしてください。
SAPI: Server Application Programming Interface サーバーアプリケーションプログラミングポート。 PHP が他のアプリケーションと対話するためのインターフェイスです。PHP スクリプトは、Web サーバー経由、コマンド ライン上で直接実行する、または他のプログラムに埋め込むなど、さまざまな方法で実行できます。 SAPI は外部通信用のインターフェイスを提供します。一般的な SAPI には、cgi、fast-cgi、cli、Apache モジュール dll などが含まれます。
1.CGI
CGIは共通ゲートウェイインターフェース(Common Gateway Interface) 平たく言えば、WebページとWEBサーバー内の実行プログラムを繋ぐ橋渡しのようなプログラムです。サーバーのプログラムを実行し、サーバーによるプログラムの実行結果を HTML ページに返します。 CGI は非常にクロスプラットフォームであり、ほぼすべてのオペレーティング システムに実装できます。CGIメソッドが接続リクエスト(ユーザーリクエスト)に遭遇すると、まずcgiサブプロセスを作成し、CGIプロセスを起動してからリクエストを処理し、処理後にサブプロセスを終了する必要があります。これはフォークして実行するパターンです。したがって、CGI を使用するサーバーには、接続要求と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI パフォーマンスを低下させる主な原因となります。ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。
2、高速CGI
fast-cgi は cgi のアップグレード版で、有効化されていれば毎回 fork する手間がかかりません。 PHP は管理に PHP-FPM (FastCGI Process Manager)、つまり PHP FastCGI Process Manager の正式名を使用します。Webサーバーの起動時にFastCGIプロセスマネージャー(IIS ISAPIまたはApacheモジュール)がロードされます。 FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセス (複数の php-cgi が表示されます) を開始し、Web サーバーからの接続を待ちます。
クライアントリクエストがWebサーバーに到達すると、FastCGIプロセスマネージャーがCGIインタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。
FastCGI サブプロセスは処理が完了すると、同じ接続から Web サーバーに標準出力とエラー情報を返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、(Web サーバーで実行されている) FastCGI プロセス マネージャーからの次の接続を待機して処理します。 CGI モードでは、php-cgi はこの時点で終了します。
上記の場合、通常の CGI がいかに遅いかは想像できると思います。 PHP へのすべての Web リクエストは、php.ini を再解析し、すべての拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。
3.APACHE2ハンドラー
PHP は Apache モジュールです。Apache サーバーはシステムの起動後、複数のプロセスのコピーを事前に生成してメモリに常駐させ、リクエストが発生するとすぐにこれらの予備のサブプロセスが処理に使用されるため、問題はありません。サブプロセスの生成が原因で発生します。これらのサーバー コピーは、HTTP 要求の処理後すぐには終了せず、次の要求を待ってコンピューター内に留まります。クライアントのブラウザ要求に対する応答が速くなり、パフォーマンスが向上します。
4、CLI
cli は、PHP のコマンドライン実行モードです。よく使用しますが、気づかないかもしれません (たとえば、Linux では、PHP がインストールした拡張機能を確認するために "php -m" をよく使用します。これは、PHP コマンドです)。ライン実行モード;