ホームページ  >  記事  >  バックエンド開発  >  PHPにはいくつかの起動モードがあります

PHPにはいくつかの起動モードがあります

王林
王林オリジナル
2019-09-16 11:58:593567ブラウズ

PHPにはいくつかの起動モードがあります

PHP のいくつかの一般的な起動モード:

1. CGI モード

CGI はユニバーサル ゲートウェイ インターフェイスです。 (Common Gateway Interface) これはプログラムです。簡単に言うと、CGI は Web ページと Web サーバー内の実行プログラムを接続する橋のようなものです。HTML で受け取った命令を実行プログラムに渡します。サーバープログラムの実行結果を HTML ページに返します。 CGI は非常にクロスプラットフォームであり、ほぼすべてのオペレーティング システムに実装できます。 CGI はすでに古いモデルであり、近年ではほとんど使用されていません。

ユーザーリクエストがあるたびに、最初に CGI サブプロセスが作成され、次にリクエストが処理され、処理後にサブプロセスが終了します。これが Fork-And-Execute です。モード。ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。したがって、CGI を使用するサーバーには、接続要求と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI パフォーマンス低下の主な原因となります。

PHP をサーバー側ソフトウェア (Apache など) に埋め込んでモジュールとしてインストールしたくない場合は、CGI モードでインストールすることを選択できます。または、PHP とさまざまな CGI ラッパーを使用して、コード用に安全な chroot および setuid 環境を作成します。このようにして、各クライアントは PHP ファイルを要求し、Web サーバーは php.exe (Win では php.exe、Linux では php) を呼び出してファイルを解釈し、解釈結果を次の形式でクライアントに返します。ウェブページ。このインストール方法では、通常、PHP 実行可能ファイルが Web サーバーの cgi-bin ディレクトリにインストールされます。 CERT 勧告 CA-96.11 では、cgi-bin ディレクトリにインタプリタを配置しないことが推奨されています。

この方式の利点は、Web サーバーと特定のプログラム処理が分離され、構造が明確で制御性が高いことですが、欠点は、アクセス要求が集中すると CGI 処理が停止してしまうことです。フォークするかどうか サーバーに大きな負担がかかるため、数百の同時リクエストによりサーバーが数百のプロセスをフォークすることを想像してみてください。これが、CGI が常にパフォーマンスが低く、リソース消費量が多いことで悪名が高い理由です。

2. FastCGI モード

FastCGI は CGI のアップグレード版であり、常に実行できる長寿命 CGI のようなものです。これがアクティブ化されていれば、毎回フォークするのに時間はかかりません (これは CGI の最も批判されているフォークして実行モードです)。

FastCGI は、HTTP サーバーと動的スクリプト言語間の通信のためのスケーラブルな高速インターフェイスです。 Apache、Nginx、lighttpd などの最も一般的な HTTP サーバーは FastCGI をサポートしており、同時に FastCGI は PHP などの多くのスクリプト言語でもサポートされています。

FastCGI インターフェイス モードは C/S 構造を採用しており、HTTP サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを起動できます。 HTTP サーバーが動的プログラムに遭遇するたびに、そのプログラムは実行のために FastCGI プロセスに直接配信され、その結果がブラウザーに返されます。この方法により、HTTP サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。

3. CLI モード

PHP-CLI は PHP Command Line Interface の略称で、その名のとおり、 PHP コマンドラインで動作するインターフェースは、Web サーバー上で動作する PHP 環境 (PHP-CGI、ISAPI など) とは異なります。つまり、PHP はフロントエンドの Web ページを作成できるだけでなく、バ​​ックエンド プログラムの作成にも使用できます。 PHP CLI シェル スクリプトは、PHP のすべての利点に適用され、スクリプトまたはサーバー側システム、または GUI アプリケーションの作成を可能にします。PHP-CLI モードは、Windows と Linux の両方でサポートされています。

[利点]

1) 複数のプロセスを使用すると、子プロセスが終了した後、カーネルがリソースのリサイクルを担当します;

2)複数のプロセスを使用すると、子プロセスの異常終了によってプロセス全体のスレッドが終了することはなく、親プロセスにはプロセスを再構築する機会がまだあります。

3) 常駐のメイン プロセスは責任のみを負います。タスクの分散のため、ロジックがより明確になります。

Linux では、PHP がインストールした拡張機能 (PHP コマンド ラインの実行モード) を確認するために "php -m" をよく使用します。興味のある学生は、"php -h" と入力して実行モードを詳しく調べることができます。 。

4. モジュールモード

モジュールモードは mod_php5 モジュールの形式で統合されており、このとき mod_php5 モジュールの機能は PHP ファイルを受け取ることです。 Apache. によって渡されたリクエストを処理し、処理された結果を Apache. に返します。 Apache が起動する前に設定ファイルで PHP モジュール (mod_php5) を設定すると、PHP モジュールは apache2 の ap_hook_post_config フックを登録し、Apache が PHP ファイルに対するリクエストの受け入れを開始したときにこのモジュールを起動します。

起動時のこのロード方法に加えて、Apache モジュールは実行時に動的にロードできます。つまり、ソース コードを再コンパイルすることなく、あるいはサーバーをまったく停止せずにサーバーを拡張できます。必要なのは、信号 HUP または AP_SIG_GRACEFUL をサーバーに送信して、モジュールをリロードするようにサーバーに通知することだけです。ただし、動的ロードの前に、モジュールをダイナミック リンク ライブラリにコンパイルする必要があります。このときのダイナミックロードとは、ダイナミックリンクライブラリをロードすることです。 Apache のダイナミック リンク ライブラリの処理は mod_so モジュールによって完了するため、mod_so モジュールは動的にロードできず、Apache のコアに静的にコンパイルすることしかできません。これは、Apache とともに起動されることを意味します。

Apache はどのようにモジュールをロードしますか?例として、前述の mod_php5 モジュールを見てみましょう。まず、Apache の設定ファイル httpd.conf に行を追加する必要があります:

LoadModule php5_module modules/mod_php5.so

ここでは LoadModule コマンドを使用します。コマンドの最初のパラメータはモジュールの名前です。名前はソースにあります。モジュール実装のコード。 2 番目のオプションは、モジュールが配置されているパスです。サーバーの実行中にモジュールをロードする必要がある場合は、シグナル HUP または AP_SIG_GRACEFUL をサーバーに送信できます。シグナルが受信されると、Apache はサーバーを再起動せずにモジュールを再ロードします。

この動作モードは、Windows 環境で Apache サーバーを使用するときによく使用されるモードであり、モジュール化 (DLL) では、PHP が起動され、Web サーバーと一緒に実行されます。 (Apache を CGI ベースに拡張し、PHP の動作効率を向上させたものです)。

5. ISAPI モード

ISAPI (Internet Server Application Program Interface) は、次の A セットです。インターネット サービス用の API インターフェイスです。ISAPI DLL は、ユーザー リクエストによってアクティブ化された後、メモリ上に常駐し、別のユーザー リクエストを待つことができます。複数のユーザー リクエスト処理関数を 1 つの DLL に設定することもできます。また、ISAPI DLL は、アプリケーションとWWW サーバーは同じプロセス内にあるため、CGI に比べて効率が大幅に高くなります。 (Microsoft の独占権のため、Windows 環境でのみ実行できます)

Apache モジュールとして、Apache サーバーは複数のプロセスのコピーを事前に生成し、システムの起動後にメモリに常駐します。これらの予備のサブプロセスを処理に使用するため、サブプロセスの生成による遅延は発生しません。これらのサーバー コピーは、HTTP 要求の処理後すぐには終了せず、次の要求を待ってコンピューター内に留まります。クライアントのブラウザ要求に対する応答が速くなり、パフォーマンスが向上します。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHPにはいくつかの起動モードがありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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