「PHPの勉強でCGIってよく聞くけど、イマイチ理解できないなあ。」
PHPにはCGI方式とモジュール方式の2つがあり、システム構築をするなら理解が必須です。
どちらも何となく理解していて、いざ実践となると困ってしまいますよね。
この記事を読めば、
- ・そもそもCGIとは何のことなのか分かる
- ・CGI版 / モジュール版の違いと強みが分かる
- ・どちらが自分のシステムに適しているのか理解できる
PHPの勉強中でCGIに足止めされている方は、ぜひ参考にしてくださいね。
目次
CGIとは
CGI(Common Gateway Interface)とは、Webサーバ上でプログラムを動作させるための仕組みのことです。
Webサーバ上でプログラムが動作していれば、それはCGIだと言えます。したがって、Webサーバ上で言語動作ができるPHPもCGIの1つですね。
また、CGIはPHPと比較されることがしばしばありますが、PHPはプログラミング言語の名前、CGIは方式の名前なので、そもそも比較対象ではありません。
CGIと比較するなら後述するモジュール方式が適切です。以下で比較するので、確認していきましょう。
PHPにおける2つの方式
PHPには前述した「CGI版」と「モジュール(Module)版」の2つの方式があります。
この2つの方式は処理の方法が違い、それぞれにメリット・デメリットがあるので、流れを把握しておきましょう。
別途プログラムで処理するCGI版
CGI版は実行ファイル形式と呼ばれ、Webサーバとは別の実行プログラムを用意する方式です。
つまり、処理の流れは以下のようになります。
PHPをWebサーバ上で処理するのではなく、別途にCGIプロセスを設けて実行します。
複数のユーザーが同じWebサーバを共有すると、お互いがお互いのプログラム処理を邪魔してしまうことがありますが、別途にプロセスを用意するCGIならその心配はありません。
その一方で、プロセスを1つ増やしてしまうため、処理速度は少し遅くなってしまうという側面もありますね。
FastCGIで速度強化
前述のとおり、通常のCGIは構造の複雑性から処理速度が遅くなるという側面がありましたが、この問題を解決したのがFastCGIです。
FastCGIは1990年代にOpen Market社によって開発された仕様で、プログラム処理速度の向上とサーバ負荷の軽減を可能としました。
通常のCGIは、ユーザーからの要求があるたびにCGIプロセスを生成し、処理が終わると破棄するという流れで構築されていました。
対してFastCGIは、一度生成したプロセスをメモリ上に記憶しておくことで、次回に同じ要求があった場合にプロセスを使いまわすという仕組みになっています。
このメモリ保持によって、セキュリティも安全で処理スピードも速い方式を実現したのです。
Apacheで直接処理するモジュール版
PHPで利用できる2つ目の方式として、Webサーバ上でプログラム処理できるモジュール版が挙げられます。
このとき利用するのがApacheというWebサーバソフトウェアで、Webサーバ上で直接的にプロセス処理できるシステムです。
つまり、処理の流れは以下のようになります。
CGI版と違い、別途にプロセスを設けることがないため、処理速度が速いのが大きなメリットです。
一方で、複数のユーザーが同じWebサーバに密集すると、セキュリティ上の問題が発生する恐れがあります。CGIとは真逆のメリット・デメリットです。
しかし、Apacheには「セーフモード」というユーザー間の干渉を防止する設定があるので、実際は問題なく利用できますね。
PHPにおけるCGI版とモジュール版の違いを比較
PHPの2つの方式を説明してきましたが、特徴を比較すると以下のようになります。
CGI版 | モジュール版 | |
---|---|---|
安定性 | 〇 | △ |
セキュリティ | 〇 | △ |
速度 | × | 〇 |
それぞれの項目に分けて、解説します。
セキュリティ・安定性ならCGI版
セキュリティや回線の安定性から見るなら、CGI版のほうが適しています。
前述のとおり、CGI版はユーザーから要求されるたびにプロセスを用意するので、ユーザー同士の干渉がないためです。
またレンタルサーバサービスでは、サービス側のメンテナンスの手間が少ないことから、CGI版を採用しているサーバがほとんど。
安定性・セキュリティを重視してシステム構築する場合は、CGI版、特にスピードの弱みも克服したFastCGIを利用すると良いですね。
処理速度ならモジュール版
プログラムの処理速度を重視するなら、モジュール版を使うのが適当です。
Webサイトに訪れるユーザーにとって処理の速さはかなり重要。特に調べものをしている場合は一刻も早く情報を手に入れたいはずです。
また安定性の弱みについても、Apacheのセーフモードによって解決している点も素晴らしいですね。
ただし、Webサーバをレンタルする際は注意が必要。繰り返しになりますが、サーバレンタルはCGI版がほとんどです。
処理速度にこだわりを持ってシステム構築をしたいなら、モジュール版のWebサーバであることを確認してからレンタルしましょう。
処理速度の比較グラフ
参考:https://www.boonex.com/trac/dolphin/wiki/HostingServerSetupRecommendations
上図はCGI版とモジュール版の処理速度を比較した図で、suPHP(黒)がCGI版のPHP、mod_php(dso) (黄)がモジュール版のPHP、FastCGI(緑)がFastCGIです。
モジュール版のほうが、通常のCGI版に比べて処理速度が速いことが明らかですね。
また、速度の弱みを解決したFastCGIはモジュール版とほぼ同じ速さで処理することも読み取れます。
システム構築に利用するなら、モジュール版・FastCGIのどちらかを選択するのがオススメですね。
用途によってCGI版とモジュール版を使い分ける
今回はPHPにおけるCGI版の概要と、モジュール版との違いについて解説してきました。
結論、CGI方式とモジュール方式はシステムの用途によって使い分けることが大切です。
自分が構築するシステムがセキュリティ面を重視するならCGI版を、データ量が多く処理速度を重視したいならモジュール版を選びましょう。