ホームページ >バックエンド開発 >PHPチュートリアル >Webサーバー上でのphpの動作モードを詳しく解説

Webサーバー上でのphpの動作モードを詳しく解説

不言
不言転載
2018-10-24 17:34:492654ブラウズ

この記事では、Web サーバー上の PHP の動作モードについて詳しく説明します。一定の参考値があります。必要な友人は参照してください。お役に立てば幸いです。 。

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

CGI は共通ゲートウェイ インターフェイス (共通ゲートウェイ インターフェイス) です。プログラム、 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 が常にパフォーマンスが低く、リソース消費量が多いことで悪名が高い理由です。

fast-cgi (ロングライブ CGI)

CGI モードの変形、つまり (CGI は通常の People、fast-cgi cgi は特殊部隊です)

FastCGI は長生きする CGI のようなもので、常に実行でき、起動していれば毎回 fork する手間がかかりません (これが最も便利です) CGI のフォークアンド実行モードを批判しました)。

FastCGI の動作原理は次のとおりです:

  1. Web サーバーの起動時に FastCGI プロセス マネージャーがロードされます [PHP の FastCGI プロセス マネージャーは PHP-FPM (php-FastCGI Process) Manager)] (IIS ISAPI または Apache Module);

  2. FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセスを開始します (タスク マネージャーで複数の php-cgi が表示されます) .exe) を実行し、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 回だけ行われます。追加のボーナスは、永続的なデータベース接続が機能することです。

cli コマンド ライン インターフェイス

ターミナルに php script.php と入力します。コマンド ラインを待ちます

webモジュールモード(ApacheなどのWebサーバーを実行するためのモジュールモード)

モジュールモードはmod_php5モジュールという形で統合されており、このときmod_php5モジュールの役割はApacheから渡されたPHPファイルリクエストを受け取り、処理し、処理結果をApacheに返す機能で、PHPの動作効率を高速化するためにCGIをベースに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 はどのようにしてモジュールをロードしますか?まず、Apache の設定ファイル httpd.conf に行を追加する必要があります:

LoadModule php5_module modules/mod_php5.so

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

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

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。