PHPモジュールモードとCGIモードについて違いなどを詳しく解説!

- システム
エンジニア - PHPモジュールモードとCGIモードについて違いについて教えてください。
- プロジェクト
マネージャー - では、基本的な違いについて解説していきます。
PHPモジュールモードとCGIモードについて
WebサーバーでPHPを実行する方法には主に、以下の2つの方法があります。
・PHPモジュールモード
・CGIモード
PHPモジュールモードとは、WebサーバーのプロセスのなかでPHPを実行する方法のことを言います。この実行方法と相対するものとしてCGIモードというものがあります。
今回はこの2つの概要と、違いを書いていきます。
PHPモジュールモードとは
WebサーバーのプロセスのなかでPHPを実行する方法のことを言います。
ここでいうWebサーバーは、ApacheというWebサーバーソフトウェアのことです。Apacheは世界中で使用されていて、多くのレンタルサーバーがApacheで動いています。そのため、一般的にPHPのモジュールモードはApacheのモジュール版のことを言います。
モジュールモードの特徴
・Rootユーザー権限でPHPが実行される
・他のユーザーのファイルを参照することができてしまう
・Webサーバーのプロセスの中で実行される
Rootユーザー権限でPHPが実行される
PHPモジュールモードでは、PHPの実行はRootユーザーが実行します。
まず、ユーザーがWebページを参照するとき、Webサーバーにアクセスします。PHPモジュールモードのWebサーバーでは、アクセスがあるとRootユーザーがPHPファイルを探し、実行します。
しかし、Rootユーザーが実行するため、セキュリティ面での不安要素があります。それは次に記述する「他のユーザーのファイルを参照することができてしまう」ことです。
他のユーザーのファイルを参照することができてしまう
PHPモジュールモードでは、RootユーザーがPHPファイルを探し、実行するため、同一Webサーバー内のユーザー間でのファイル干渉が可能です。
レンタルサーバーでは共用サーバーと言う、1つのWebサーバーを複数のユーザーが利用する利用形態があります。この利用形態で、モジュールモードでPHPを実行している場合、他のユーザーが他のユーザーのファイルを参照することができてしまいます。
これはセキュリティー面において問題であるため、共用サーバーではPHPモジュールモードは向いていないとされています。
そこで、PHPモジュールモードでは「セーフモード」という設定があり、これを適用すれば他のユーザーが自ユーザーのファイルを参照できなくすることができます。
ただ、この設定はメリットだけでなくWordPressの管理画面でファイル操作が行えないなど、一部使えない機能が発生します。
Webサーバーのプロセスの中で実行される
モジュールモードは、Apacheの拡張モジュールとして運用されます。そして、モジュールモードはWebサーバー(Apache)のプロセスの中で実行されるため、他の無駄なプロセスが立ち上がることがありません。
これにより、WordPressなどのWebサイトで表示高速化など、パフォーマンスの向上が見込めます。
CGIモードとは
CGI(Common Gateway Interface)とは、Webサーバー上でプログラムを実行する仕組みのことを言います。Webサーバー上でPHPをこの仕組みで実行することをCGIモードと言います。
CGI版の特徴
・それぞれのユーザー権限でPHPを実行する
・ディレクトリごとにPHPのバージョンなどを変えることができる
・Webサーバーとは別のプロセスとして実行される
それぞれのユーザー権限でPHPを実行する
それぞれのユーザー権限で実行するため、同一サーバー上の他のユーザーとのファイル干渉はありません。そのため、多くのレンタルサーバーではセキュリティーやメンテナンス上の理由から、CGIモードが利用されています。
ディレクトリごとにPHPのバージョンなどを変えることができる
CGIモードは、ディレクトリごとにPHPのバージョンを変えることができます。そのためには「.htaccess」という設定ファイルが必要になります。この設定ファイルをディレクトリごとに設置することで、PHPのバージョンをディレクトリごとに変更することができます。
また、「php.ini」ファイルというPHPの設定ファイルで動作環境を変えることができます。こちらもディレクトリごとの変更が可能です。
CGIモードでは、このようにディレクトリごとに「.htaccess」「php.ini」を設置することで、PHPのバージョン、動作環境を変えることができますが、以下のようなメリットがあります。
・PHPのバージョンアップ前に動作確認をしたい
―既存のシステムとは別のディレクトリに「.htaccess」で新しいPHPのバージョンを指定して動作確認ができます。
・使用したいソフトウェアが古いバージョンでないと動かない
―セキュリティの強化などがされている最新バージョンを常に使用したいですが、古いバージョンでないと動かないソフトウェアがあったとしても、別のディレクトリに古いバージョンを指定した「.htaccess」を設置してそこで動作させれば問題ありません。
.htaccessとは
Apacheの設定ファイルで、ディレクトリ単位でApache(Webサーバー)の設定をすることができます。適用範囲は設置したそのディレクトリ内と、その下層ディレクトリです。
Webサーバーとは別のプロセスとして実行される
CGIモードで実行すると、Webサーバーとは別のプロセスとして実行されます。PHPプログラムが実行されるたびにプロセスが1つ立ち上がることになります。
CGIモードの場合では、PHPスクリプトが呼ばれてからPHPの読み込みを行い、Webサーバーとは別プロセスとして実行するため処理速度が遅いです。
そこで、処理速度改善のために登場したのがFastCGIです。FastCGIは一度立ち上がったプロセスを終了させることなく保持することで、処理の高速化、負荷軽減を実現しています。
モジュールモードとCGIモードの違い
ここからは、本題のモジュールモードとCGIモードの違いについて記述していきます。上で挙げたそれぞれの特徴から違いを見つけ、どちらの方が優れているのか比べます。
まず、実行方法の違いからはCGIモードの方がセキュリティー面で優れています。実行プロセスの違いは、処理速度に影響があり、PHPモジュールモードの方が速いという結果が出ます。以下はその詳細になります。
実行方法の違い
PHPモジュールモードでは、PHPの実行はRootユーザーが実行するのに対し、CGIモードの場合は、それぞれのユーザー権限で実行します。このことから、セキュリティー面で違いが生まれます。
セキュリティーの違い
PHPモジュールモードでは、Rootユーザーが実行するためユーザー間でファイル干渉可能ですが、CGIモードの場合は、それぞれのユーザーで実行するためそのようなことがありません。
実行プロセスの違い
PHPモジュールモードでは、Apacheのプロセスの中で実行されます。CGIモードの場合は、Apacheとは別プロセスとして実行されるため、PHPプログラムが実行されるたびにプロセスが1つ立ち上がります。
速度の違い
CGIモードは、PHPプログラムの実行のたびにプロセスが立ち上がるためモジュールモードより速度が遅くなりがちです。FastCGIの場合は、モジュールモードとあまり変わらないようで、場合によってはFastCGIの方が速くなることがあるようです。
- システム
エンジニア - つまり、実行速度とセキュリティー面での違いということでしょうか。
- プロジェクト
マネージャー - そうですね。下記に確認方法を記載していますので、ぜひ覚えてください。
PHPモジュールモードについてのまとめ
PHPモジュールモードはApacheの拡張機能で、ApacheのプロセスとしてPHPを実行する方法です。そのため、Apacheとは別プロセスで動かすCGIモードよりも比較的速い処理速度が期待できます。
しかし、PHPモジュールモードはRootユーザーが実行するため、ユーザー間でのファイル干渉が可能です。これは各ユーザーで実行するCGIモードと比べセキュリティー面で劣る点です。そのため多くのレンタルサーバーではセキュリティーを考慮してCGIモードが採用されています。
最後に、PHPプログラムがモジュールモードで動いているのか、CGIモードで動いているのかを確認する方法を記述します。
1
|
< ?php phpinfo(); ? >
|
上記コードを記述したPHPファイルを用意し、Webサーバーにアップロードし、アクセスします。アクセスするとPHPのバージョンが表示された表のようなものが表示されるので、その表の中の「Server API」という項目を探してください。
その項目の値が、「Apache x.x Handler」や「Apache」となっていればPHPモジュールモードということになります。逆に「CGI/FastCGI」となっていればCGIモードということになります。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)