PHPのモジュール版とCGI版の違いは?メリット・デメリット・パフォーマンスを比較

モジュール版とCGI版何が違うの?と疑問に思う方も多いと思います。
今回はモジュール版PHPとCGI版PHPの違いとパフォーマンス等を比較していきます。

モジュール版PHPとは?

モジュール版PHPとはWebサーバーのプロセスの中でPHPを実行する方法です。
Webサーバーのプロセスとして実行されるため、実行時に新しいプロセスが必要ありません。
そのため、実行ユーザーもWebサーバーのプロセスのユーザーでの実行になります。

モジュール版のメリット

実行に際し新しいプロセスを立ち上げる必要がないため、CGI版に比べ処理速度が高速になります。
単一のサービスで利用する場合やユーザーを分ける必要がない場合には権限の管理もシンプルに行えるメリットがあります。

モジュール版のデメリット

PHPを使っていないサイトでも、apacheプロセス上にPHPモジュールを保持している分、メモリ効率が悪いです。。
PHPがWebサーバーを動かすユーザー(rootなど)で動作するため、ユーザーが複数いる共用サーバーではセキュリティ上好ましくありません

参考
PHP 5.3まではセーフモードという機能がありました。
しかしこの問題をソフトウェアレベルで扱うのは適切ではないとし、セーフモードはPHP5.4から削除されています。

CGI版PHPとは?

CGI版PHPとはApacheのプロセス内で処理せず、CGI プログラムを別途起動して処理する方法です。

CGI版のメリット

CGI版では、Webサーバーと異なるユーザーでPHPを実行するため、他ユーザーのファイルに干渉してしまうといった危険がありません。
実行するユーザが異なるため、モジュール版より細かい権限設定が行えます。
このようにOSレベルでのセキュリティを設定できるのでモジュール版より安全に運用できます。
さらに、Apacheとは独立しているため、実行するPHPのバージョンも切り替えることができます。

CGI版のデメリット

CGIモードの場合、別途プログラムを起動するため、起動する分動作が遅くなります。
しかし、現在では処理速度に関してはFastCGIという仕様によりこのデメリットも解消されつつあります。

CGI版のデメリットを解消すべく生まれたFastCGI

FastCGIとは、CGI版でもモジュール版と同等の処理速度を実現するための実行方式です。
FastCGIでは、プロセスが実行された後すぐにプロセスを終了させずに、一定期間メモリ上に保持します。
このメモリ上に保持されたプロセスを再利用することで、起動と終了時の遅延をなくすことができます。
すでに起動済みであるため、CPUへの負荷、メモリへのロードなどの時間が短縮されほとんどモジュール版と同様のパフォーマンスに近づきます。

レンタルサーバーでCGI版が多い理由

  • 一般ユーザー向けのサーバーの場合は、速度の遅延より情報漏えい等セキュリティ面の方がリスクが高い
  • PHPのバージョンを切り替えることができるので多様なニーズに応えられる

ことから、CGI版PHPを提供している会社が多いです。
CGI版でもFastCGIであれば、速度面のデメリットは少ないので安心して選択することができます。

CGI版とモジュール版の確認方法

レンタルサーバーを利用している場合は、公式サイトを見てみましょう。どちらのモードで動作するのかは、必ずどこかに記載されています。
逆にその記載が見つからない場合、違うレンタルサーバー会社にした方が懸命です。

レンタルサーバーでもモジュール版とCGI版を選択できる場合や、VPS等に自前でインストールした場合は、
phpinfo関数で確認することができます。
CGI版の場合Server APIの項目がCGI、 FastCGI、FPM/FastCGIなどになります。
モジュール版の場合は、Apache 2.x Handler、Apacheなどになります。

パフォーマンス比較

suPHPというのがCGI版のPHP、mod_phpというのがモジュール版のPHPです。
結果を見てわかるとおり、FastCGIとmod_phpでは速度にほとんど差がありません。
CGI版のPHPが明らかに遅いのがわかります。

参考: https://www.boonex.com/trac/dolphin/wiki/HostingServerSetupRecommendations

速度面を重視するならFastCGI版かモジュール版のPHPを採用しているレンタルサーバーを選びましょう!