タイトルの通り、一部の人にだけ便利なPHP情報をご紹介します。
ZTSとは
ZTS (Zend Thread Safe) は、マルチスレッド環境に対応するためのPHPの機構です。
マルチスレッド環境では、同じメモリ領域を複数のスレッドが共有します。複数のスレッドが同時に一つのリソース(たとえばグローバル変数)を読み書きする可能性があるので、シングルスレッド環境とは異なるプログラミングが必要になります。マルチスレッド環境で安全に動くようなプログラムのことをスレッドセーフと呼びます。
つまり、ZTSというのはPHPのスレッドセーフ実装ということになります。
とはいえ、PHPはシングルスレッド環境で動かす方が一般的です。LinuxやMacOSXなど、多くの環境のPHPがNTS (Non Thread Safe) で動作しているはずです。ZTS動作が必要なのはWindows+IIS環境くらいでしょう。
ZTSかどうかはPHPのビルド時に決まります。何かの理由で両方を比較したい場合はPHPのバイナリまたは共有ライブラリを2種類用意する必要があります。
ZTSかNTSかをPHPプログラムから判断する
このZTS/NTSについて、今どちらのモードで動いているかPHPプログラムから知りたい場合は、定数PHP_ZTS
で調べることができます。1ならZTS有効、0なら無効です。
念のため補足しておくと、PHPプログラマの目線ではZTSでもNTSでも同じPHPプログラムが同じように動くはずなので、ZTSかNTSかはそれほど重要ではないはずです。
どういうときに便利か
ZTSかNTSかでPHPプログラムは影響を受けないと書きましたが、PHP拡張モジュールの場合は別です。僕はNTS環境でしか期待通りに動かない拡張モジュール(hnw/php-strdumper)を書いたので、そのテストコードでZTSかNTSかを調べたかったんです。
まさに俺得情報ですね。
おまけ
他にもPHP_DEBUG
という定数も見つけました。これを使えばPHPが--enable-debug
つきでビルドされているかどうかを調べられます。これらの定数はPHP5.2.7以降で使えます。