PHPには、CGI版とモジュール版がある

レンタルサーバのPHPの設定を見ると、

CGI版

モジュール版

とあります。

なんなんだ?

PHP公式のページ?を参照すると

サーバーに PHP を組み込む方法が 2 種類あります。多くのサーバーに対して、各サーバー独自のモジュールインターフェイス (SAPI とも呼ばれます) を通じて、ダイレクトに PHP を動作させることができます。 Apache、Microsoft Internet Information Server、 Netscape、iPlanet サーバーなどがサポートされています。 ISAPI と呼ばれるマイクロソフト互換のモジュールインターフェイスを 持つ Web サーバー(OmniHTTPd など)もサポートされます。 PHP がモジュールのサポートをしていない Web サーバーに対しては、 CGI もしくは FastCGI プロセサとして PHP を使用することができます。つまり、PHP ファイルへのリクエストの処理を、 PHP のコマンドライン版の実行ファイルを使って行うよう Web サーバーを設定することができます。

https://www.php.net/manual/ja/install.general.php

CGI版のPHPの動き

  1. ユーザからWEBサーバにリクエスト(例、ホームページにアクセスする)
  2. 1のリクエストを受け取ると、WEBサーバがCGI(プロトコル)の仕組みを利用してPHPを実行する。
  3. WEBサーバがCGI経由のPHPの実行結果をユーザに返す。

モジュール版のPHPの動き

  1. ユーザからWEBサーバにリクエスト(例、ホームページにアクセスする)
  2. 1のリクエストを受け取ると、WEBサーバが直接PHPを実行する。
  3. WEBサーバがPHPの実行結果を、ユーザに返す。
CGI版FastCGI版モジュール版
実行速度遅い速い速い
php.iniの読込毎回プロセス生成時初回のみ
php.iniを変更した場合サーバの再起動が必要
CGI版とモジュール版の比較結果

CGIは、リクエストがあるたびに、プロセスが1つ生成され、完了したらプロセスが破棄される仕組み。プロセスの生成と破棄は、負荷が高い処理。

モジュールは、WEBサーバの機能として組み込まれているため、そのまま実行して完了できる。プロセスの生成と破棄といったことはない。

CGIは、改良されたFastCGIと呼ばれるものがある。FastCGIは、初回起動したプロセスを一定時間保持して利用することにより、プロセスの生成と破棄を毎回行わない。モジュール版のPHPと同等の速度がでる。

よし!今日も1つ知らないことがわかって、頭が賢くなった気がしました。

One thought on “PHPには、CGI版とモジュール版がある

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください