PHP
module
Cgi

PHPのモジュール版とCGI版の違い


概要

PHPにはモジュール版とCGI版が存在する。その場合の違いをまとめる。


説明


CGI版

実行ファイル形式とも呼ばれ、Webサーバーとは別のプロセスで実行される。

このメリットとしては、まずセキュリティ面。CGI(版のPHP)を動かす各ユーザーは、Webサーバー本体を動かすユーザーとは異なる。つまりは、アプリケーションサーバとwebサーバーが別に存在する状態となる。そのため誤って他ユーザーに干渉してしまうといった危険がない。また、副次的な効果としてサーバの複数台運用の際に依存が少ないことによる移行しやすさがある。

一方デメリットとしては、Webサーバーとは別個のプロセスとして動かすぶん、実行するたびにメモリのロードが必要となり、処理作度がモジュール版に比べて遅くなる。

なお処理速度の問題を解決するためにFastCGIという仕様も存在していて、レンタルサーバーによってはこのFastCGIを採用しているところもある。


モジュール版

CGI版の逆で、WebサーバーのプロセスのなかでPHPを実行してしまう方法。現在多くのレンタルサーバーはWebサーバーにApache(アパッチ)を採用しているため、モジュール版というと、通常はApacheのモジュール版を意味。

ただPHPがWebサーバーを動かすユーザー(root権限など)で動作するため、ユーザーが複数いる共用サーバーではセキュリティ面に不安がある。そこでモジュール版には「セーフモード」という設定があり、ユーザー間のファイル干渉を防止できるようになっている。またモジュール版のメリットとして、WebサーバーのプロセスでPHPが実行されるため、CGI版に比べて動作速度が高速になるという点がある。


一言でまとめると


モジュール版

Apache の拡張機能で直接処理する方法


CGI版

Apache で直接処理せず、CGI プログラムを別途起動して処理する方法


補足情報

モジュール版の欠点として


ユーザーが複数いる共用サーバーではセキュリティ面に不安がある


と書いたが、これは複数のユーザで一つのミドルウェア(Apache)を利用することによることが要因。そのため、共用サーバーでは導入がためらわれる時もある。