PHP の実行のやり方についてメモ

phpはなんとなく、mod apache と php-fpm があって、とりあえず php-fpm 使うか、といった適当な認識でいっていたが、いい加減どういうふうにスクリプトが実行されるのか知りたくなったのでメモ。

"SAPI" について知る

ちょうど最近良い資料があがっていたのでこれで学んだ

「PHP と SAPI と ZendEngine3 」についてを #phperkaigi で話してきたこと - do_akiの徒然想記

f:id:castaneai:20180314115539p:plain:w500

(引用元:「PHP と SAPI と ZendEngine3 」についてを #phperkaigi で話してきたこと - do_akiの徒然想記

なるほど。

この資料はほんとうにすごい、extension と zend_extension の違いとか今はじめて知った。

FastCGI について知る

従来の CGI はリクエスト毎に process を作っていたのに対して、最初から一定数用意して、使いまわす。そうすることで process 開始時のオーバーヘッドをなくす。

f:id:castaneai:20180314122445p:plain:w500

(引用元:「PHP と SAPI と ZendEngine3 」についてを #phperkaigi で話してきたこと - do_akiの徒然想記

FastCGI - Wikipedia

Instead of creating a new process for each request, FastCGI uses persistent processes to handle a series of requests. These processes are owned by the FastCGI server, not the web server.

具体的な C コードをまじえた CGI と FastCGI の仕組みの比較が次のサイトにあって参考になった。

Exploring FastCGI protocol and its implementation in PHP - Alibaba Cloud Developer Forums: Cloud Discussion Forums

FastCGI 自体はプロトコルなので、言語に依存していない。さまざまな言語の binding がある

FastCGI can be implemented in any language that supports network sockets. (Since "FastCGI is a protocol, not an implementation," it is not tightly bound to any language at all.) APIs exist[17] for:

FastCGI - Wikipedia