この記事は、PHP本格入門上のChapter1に書かれているWebサーバーとPHPについてのメモです。
Webサーバー … Webサーバーとして動作するためのソフトウェアがインストールされたOSのこと。
PHPの実行には、WebサーバーソフトウェアにPHPを実行するためのモジュール(部品)のインストールが必要。
PHPプログラムの実行方法
WebサーバーソフトウェアとPHP本体の連携が必要
- Apacheのモジュール版PHPを使用する
- CGI版PHPを使用する
- PHP-FPMを使用する
Apacheのモジュール版PHPを使用する
Apacheのモジュールとして実装されたPHPを介してPHPを実行する。
実体は php7apache2_4.dll(Windows)やlibphp7.so(Linux系OS)など。
Apacheの起動とともにロードされる。
Webサーバーのプロセスで動作するので高速。
Webサーバーのユーザーが実行するため、ユーザーが複数いるとセキュリティ面で不安。
CGI版PHPを使用する
Common Gateway Interfaceという通信ルールに対応したCGI版PHPを使用し、PHPプログラムを実行する。
CGIに対応したWebサーバーソフトウェアで動作する。
1回のHTTPリクエストごとにPHPプロセスを起動するためオーバーヘッドが大きい。
実体はphp-cgi.exeなど。
Webサーバーとは異なるプロセスで動作するので、モジュール版と比べて動作が遅い。
実行ユーザーがWebサーバーのユーザーとは異なるので他のユーザーに干渉しない。
PHP-FPMを使用する
CGIのオーバーヘッドを補うために開発されたFastCGIというプロトコルに則って実装された(FastCGI Process Manager)。
CGI版PHPプロセスを管理する役割を担っていて、CGI版PHPを起動済みの状態でWebサーバーソフトウェアからの通信を受け付ける。
PHPプログラムは最終的に、コアエンジンであるZend Engineによって実行される。
Zend EngineがPHPプログラムをオペコードという中間言語に変換し、その後VM(Virtual Machine)上で実行する。
モジュール版PHP、CGI版PHPなどを総称してSAPI(Server Application Programming Interface)という。実行元が何であれSAPIが環境差を吸収する。