ホームページ > php教程 > php手册 > PHP実行モード

PHP実行モード

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-14 00:02:30
オリジナル
873 人が閲覧しました

1.動作モード

PHP の 5 つの一般的な動作モードについて:

1)CGI(共通ゲートウェイインターフェース)

2) FastCGI (常駐 CGI / ロングライブ CGI)

3) CLI(コマンドライン実行/コマンドラインインターフェイス)

4) Web モジュールモード (Apache などの Web サーバーが動作するモード)

5)ISAPI(インターネットサーバーアプリケーションプログラムインターフェース)

注: PHP5.3 以降、PHP には ISAPI モードがなくなり、php5isapi.dll ファイルはインストール後に使用できなくなります。 IIS6 で上位バージョンの PHP を使用するには、FastCGI 拡張機能をインストールし、IIS6 が FastCGI をサポートできるようにする必要があります。

1.1 CGI モード

CGI は、接続時に 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 が常にパフォーマンスが低く、リソース消費量が多いことで悪名が高い理由です。

1.2 FastCGI モード

FastCGI は CGI のアップグレード版です。FastCGI は 長寿命 CGI のようなもので、起動するたびに時間がかかりません。 1 回 (これは CGI の最も批判されているフォーク実行モードです)。

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

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

【原則】

1) Web サーバーの起動時に FastCGI プロセス マネージャー (IIS ISAPI または Apache モジュール) をロードします。

2) FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセス (複数の php-cgi.exe または php-cig が表示されます) を開始し、Web サーバーからの接続を待ちます。

3) クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続します。 Web サーバーは CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。

4) FastCGI サブプロセスは処理を完了した後、同じ接続から Web サーバーに標準出力とエラー情報を返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。通常の CGI モードでは、php-cgi.exe はここで終了します。

CGI モードでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。

備考: PHP の FastCGI プロセス マネージャーは PHP-FPM (PHP-FastCGI Process Manager)

です。

【メリット】

1) 安定性の観点から、FastCGI は独立したプロセス プールを使用して CGI を実行します。1 つのプロセスが停止した場合、システムはそれを簡単に破棄し、新しいプロセスを再割り当てしてロジックを実行できます。

2) セキュリティの観点から、FastCGI は分散コンピューティングをサポートします。 FastCGI はホスト サーバーから完全に独立しています。FastCGI がどのようにダウンしても、サーバーはダウンしません。

3)

パフォーマンスの観点から、FastCGI は動的ロジックの処理をサーバーから分離し、負荷の大きい IO 処理をホスト サーバーに任せ、ホスト サーバーが IO を実行できるようにします。通常の動的 Web ページの場合、論理的な処理はほんの一部であり、静止画像などが大量に存在する場合があります。

【デメリット】

メリットについて話した後は、デメリットについて話しましょう。実際に使用したところ、実稼働環境のサーバーには FastCGI モードの方が適しています。ただし、開発マシンには適していません。 Zend Studio を使用してプログラムをデバッグすると、FastCGI は PHP プロセスがタイムアウトしたと判断し、ページ上で 500 エラーを返すためです。これは非常に面倒だったので、開発マシンで ISAPI モードに戻しました。一部のサーバーの新しいバージョンのサポートは良好ではないため、分散負荷分散を必要としないモジュール式インストールの方が良い選択です。 FastCGI とサーバー間の現在の通信は十分にスマートではなく、FastCGI プロセスの実行に時間がかかりすぎると、プロセスが強制終了され、停止したプロセスとして再起動されます。これにより、FastCGI が実行できなくなります。オンラインデバッグを可能にします。マルチプロセスであるため、PHP-CGI インタプリタはプロセスごとに 7 ~ 25 メガバイトのメモリを消費します。この数値を 50 または 100 倍にすると、大量のメモリが消費されます。

1.3 CLI モード

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

【メリット】

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

2) 複数のプロセスを使用すると、子プロセスが異常終了してもプロセス スレッド全体が終了することはなく、親プロセスはプロセスを再構築する機会が得られます。

3) 常駐メインプロセスはタスク分散のみを担当し、ロジックはより明確です。

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

1.4 モジュールモード

モジュールモード は、mod_php5 モジュールの形式で統合されています。現時点で、mod_php5 モジュールの機能は、Apache によって渡された PHP ファイルリクエストを受け取り、それらのリクエストを処理することです。結果は 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) では、Web サーバーと一緒に PHP が起動して実行されます。 (Apache を CGI ベースに拡張し、PHP の動作効率を向上させたものです)。

1.5 ISAPI モード

ISAPI (Internet Server Application Program Interface) は、Microsoft が提供するインターネット サービス用の API インターフェイスのセットで、ユーザーの要求後に永続的にアクティブ化できます。ユーザーからの別のリクエストを待機するメモリ、DLL 内に複数のユーザー リクエスト処理関数を設定することもできます。また、ISAPI DLL アプリケーションと WWW サーバーは同じプロセス内にあるため、CGI よりも効率が大幅に高くなります。 (Microsoft の独占権のため、Windows 環境でのみ実行できます)

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

2.参考文献

1) http://blog.csdn.net/hguisu/article/details/7386882

2) http://www.phpernote.com/news/723.html

3) http://www.jb51.net/article/37759.htm

4) http://blog.csdn.net/21aspnet/article/details/3280512

5) http://www.williamlong.info/archives/1846.html

6) http://www.phpddt.com/php/php-cli.html

7) http://www.cnblogs.com/ellisonDon/archive/2012/11/19/2777526.html

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート