0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Windows】PHPのSAPIとThreadSafeの選び方

Last updated at Posted at 2025-06-22

今日の記事はすごくAIくさい!
久々に Windows に PHP を入れることがあったのだが、すっかり忘れていたので整理した。

結論

先に結論を置いておく。(あくまでも基本的には)

Webサーバー 使うPHP
CLI CLI + NTS
IIS FastCGI + NTS
Apache module + ZTS
nginx PHP-FPM + NTS

今何を使ってるかの判定はこちらで。

$ asdf -v
asdf version v0.18.0 (revision 2114f1e)

$ php -v
PHP 8.4.8 (cli) (built: Jun 12 2025 20:46:14) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.8, Copyright (c) Zend Technologies

$ php -i | grep "Thread Safety"
Thread Safety => disabled

普通に入れると cliNTS になるみたい。

PHP の種類

実は PHP には大きく分けて3種類あるらしいよ。
SAPIServer API っていう概念みたい。

【CLI】 コマンドラインで実行するもの

普通に PHP コマンドを実行するときのもの。

【モジュール】 直接 Web サーバーのモジュールとして実行するモード

PHP は、Webサーバーと一緒に使うことが多い。
その時、Webサーバーの内部に、モジュール、プラグイン形式で搭載して利用するもの。

Webサーバー内部で実行されるため、とても高速。
だがセッション数の制限やセキュリティ面の問題もあり、若干すたれてきている。

Apache でよく使われる。

【CGI】 CGI や FastCGI を利用して実行するモード

CGICommon Gateway Interface の略。
Webサーバー内部の処理を別のプロセスに分離しようというもの。
こうすることで、Webサーバーとは別のユーザーでプログラムを実行できたりと、良い点が多い。

ただリクエストごとにPHPのプロセスを立ち上げて、とするとボトルネックになる。
そこでベースを常にメモリ上に展開して管理しようとしたのが FastCGI
プロセスやリソースの管理をまとめてやってくれる。

PHP では FPM という FastCGI Process Manager が使われている。
nginx でよく使われる。

PHP のビルド種別

PHPにはもう一個種類がある。
それが NTSZTS のスレッド対応の区別だ。

  • NTS: Non Thread Safe
  • ZTS: Zend Thread Safe

スレッドセーフとは、複数のスレッド(処理)が互いに独立していて、互いに影響を与えないという意味。
つまりあるリクエスト処理中に、ほかのリクエストにの処理をしても大丈夫ということ。

この二つは好きなほうを使ってよさそうで、そうではない。

例えば Apache サーバーの場合、リクエストの処理は Webサーバーと同じプロセスで処理されるため、スレッドセーフである必要がある。
一方CGIを利用する場合、リクエストごとにPHPを立ち上げるので、スレッドセーフの必要がないです。

つまり、利用する環境に合わせて選択する必要があります。

そういえば Apache PHP が主流だったとき、新生の nginx に乗り換えようと思ったら PHP が動かなかった記憶が。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?