WebサーバーとPHPの関係

WebサーバーとPHPの関係

この記事は、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が環境差を吸収する。

PHP