Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

概要

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

説明

CGI版

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

メリット

セキュリティ

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

デメリット

実行速度

Webサーバーとは別個のプロセスとして動かすぶん、実行するたびにメモリのロードが必要となり、処理速度がモジュール版に比べて遅くなる。
なお処理速度の問題を解決するためにFastCGIという仕様も存在する。
レンタルサーバーによってはこのFastCGIを採用しているところもある。

モジュール版

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

メリット

WebサーバーのプロセスでPHPが実行されるため、CGI版に比べて動作速度が高速になりやすいという点がある。

デメリット

HPがWebサーバーを動かすユーザー(root権限など)で動作するため、Linuxユーザーが複数用いられる共用サーバーではセキュリティ面に不安がある
この課題を解決するために、モジュール版には「セーフモード」という設定があり、ユーザー間のファイル干渉を防止できるようになっている。
ただし、諸々設定が必要であるため、そこはデメリットの一つになりうる。

一言でまとめると

モジュール版

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

CGI版

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

補足情報

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

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

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

SuguruOoki
現在は、TechBowlで主にフロントエンドを描いてる人。 以前は、バックエンドの開発と、データ分析をやっていた。
https://github.com/SuguruOoki
techtrain
プロのエンジニアを目指すU30(30歳以下)の方に現役エンジニアにメンタリングもらえるコミュニティです。
https://techbowl.co.jp/techtrain/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away