.net column

.NET開発者のためのブログメディア

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

公開日時:   更新日時:
PHPモジュールモードとCGIモードについて違いなどを詳しく解説!
基本情報技術者試験の試験対策はこちら>>

SE
PHPモジュールモードとCGIモードについて違いについて教えてください。

PM
では、基本的な違いについて解説していきます。

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の方が速くなることがあるようです。

SE
つまり、実行速度とセキュリティー面での違いということでしょうか。

PM
そうですね。下記に確認方法を記載していますので、ぜひ覚えてください。

PHPモジュールモードについてのまとめ

PHPモジュールモードはApacheの拡張機能で、ApacheのプロセスとしてPHPを実行する方法です。そのため、Apacheとは別プロセスで動かすCGIモードよりも比較的速い処理速度が期待できます。

しかし、PHPモジュールモードはRootユーザーが実行するため、ユーザー間でのファイル干渉が可能です。これは各ユーザーで実行するCGIモードと比べセキュリティー面で劣る点です。そのため多くのレンタルサーバーではセキュリティーを考慮してCGIモードが採用されています。

最後に、PHPプログラムがモジュールモードで動いているのか、CGIモードで動いているのかを確認する方法を記述します。

上記コードを記述したPHPファイルを用意し、Webサーバーにアップロードし、アクセスします。アクセスするとPHPのバージョンが表示された表のようなものが表示されるので、その表の中の「Server API」という項目を探してください。

その項目の値が、「Apache x.x Handler」や「Apache」となっていればPHPモジュールモードということになります。逆に「CGI/FastCGI」となっていればCGIモードということになります。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags