PHPの実行には種類がある
何言ってるんですか?PHPはPHPでしょ?っていう人ほんとは僕だけじゃないですよね?
WEBサーバーがHTTPリクエストを受け取ったあとにPHPのプログラムが実行されるわけですが、その実行方法には種類があるというのです。
その種類についてウルトラ簡単に図解してみました。
Apache モジュール版
ついこの間までWEBサーバーの代名詞とも言えたApacheですが、この方法ではPHPの処理はApacheに内包されたようなイメージで実行されます。
PHPのサーバーでの処理プロセスが、Apacheと同じプロセス内で実行されています。
この方法は比較的高速にPHPを実行することができます。
そのためかつてはメジャーな実行方法だったなという印象でした、たぶん。
デメリットがあるとすれば、WEBサーバーの実行ユーザーがそのままPHPのプログラムも実行していきますので権限が強いユーザーがアプリケーションの実行も担ってしまうことになることです。
サーバーによってはrootユーザーがPHPを実行しにいくこともあることを考えると、システムをぶっこわすような処理も動いてしまう?なーんてことも考えられたり考えられなかったり。
【メリット】
PHPのプロセスを別で立ち上げ直す必要がないので早い!
【デメリット】
セキュリティ的に危ないかも
CGI
CGI (Common Gateway Interface)。
なんのこっちゃということですが、要は
WEBサーバーがリクエストを受けてからプログラムが実行されてリクエストが返却されるあたりの仕組み
このことをCGIと呼ぶみたいです。
WEBサーバーとプログラミング言語の実行(つまり動的に返却するコンテンツを作り分ける機能)という本来別の処理が連携されている2つのものの共通、という部分にフォーカスされているのかなと思います。
PHPの起動方法の呼び方については、そもそも歴史的に次の技術がでてきて呼び方を追加するような感じになっているのかなとも思うので個人的には比較するにはあまりわかりやすい呼びわけにはなっていないと思います。
あとはその実行されるプログラムだけを指すこともあるとかないとか。
CGIの場合は先ほどのPHPモジュール版の実行のデメリットは解消しているのですが、メリットを失っているイメージです。
PHPのプロセスが別で起動する分、起動時、終了時の手間がかかり速度が鈍化します。
【メリット】
プロセスが別なのでセキュリティ的に制御がしやすい
【デメリット】
PHPのプロセスを別で立ち上げ直すので遅い
FastCGI
CGIの悪い部分を無くした感じ。
PHPのプロセスはWEBサーバーのプロセスに従って起動・終了を繰り返すのではなく、
すでに起動しているプロセスを使用するためコストが少ないわけです。
ゆえのFAST。
最近?でもないですが、昔はメジャーではなかったphp-fpmがいろんなプロジェクトで常識になってきたのはnginxの普及が大きいのかなと思います。
モジュール版の説明にApacheというWEBサーバーの名前が名指しだったのはNginxではモジュール版という概念は存在しないからです。
Nginxはphp-fpmとセットでないと実行することができません。
【メリット】
最強
まとめ
厳密に説明すると少し混乱することもあるかと思いますが、ざっくり
WEBサーバーは2強、ApacheかNginxか。
Nginxならプロセスが別であるphp-fpmを使う
Apacheならプロセスが一緒であるモジュール版での実行もあり
くらいな感じで、リクエストを受け付けるWEBサーバー というものとア プリケーションを実行するためのプログラミング言語実行プロセス というものの立ち位置を理解できていればビジネスの従順なしもべとしてシステムを開発していくにはまず困らないかなと思いました。