Apache の mpm_worker / mpm_event 上で mod_php を利用すると Web フロントエンドの翻訳周りが誤動作する
不具合報告、というか要望です
下記環境にて、組み合わせ試験してみました
CentOS6 x86_64
Apache 2.4.4 mpm_worker / mpm_event / mpm_prefork
PHP 5.4.17 mod_php / php-cgi
mod_fcgid 2.3.7
zabbix 2.0.6
mod_php 側は、コンパイルオプション「--enable-maintainer-zts」をつけてコンパイルしており、
PHP 自体はマルチスレッドに対応している状態にしてあります
Apache 側を、mpm_prefork などプロセスレベルのマルチプロセス動作の設定にした場合には
mod_php を利用しても、mod_fcgid + php-cgi を利用しても、問題なく動作します
また、Apache 側を、mpm_worker や mpm_event など、マルチスレッド動作の設定にした状況下で
mod_fcgid を利用して cgi 版の php を利用した場合も、問題ありません
ところが、Apache 側を mpm_worker / mpm_event の設定にした状況下で、
mod_php を利用した場合、フロントエンドのトップページ、ダッシュボード上など、
様々な翻訳が掛かる部分にて、ところどころ英語表記になることがあります
リロードするたびに状況は変わり、うまく翻訳される場合もあります
原因を調査したところ、frontend 内の一部ソースファイル「include/config.inc.php」内で
putenv 関数を用いた環境変数の指定と、setlocale 関数を用いたロケール設定が行われており、
アクセスユーザの言語ロケール指定にあわせた初期化処理を、リクエスト毎に処理している部分に
原因があるようです
putenv / setlocale での指定は、プロセスレベルでの設定値となってしまうため、
マルチスレッド環境下では、他のスレッドに影響を与えてしまっているようです
既にかなり開発が進んでいる 2.2 に対する要望ともなりますが、
できることならば、mod_php を利用した環境下でも mpm_event 等のスレッド型の httpd 処理が
利用できるようになってくれればと思います
#本内容を本家の バグ・要望管理システム「https://support.zabbix.com/」に対して
#要望として挙げようと思ったのですが、英語力に自信がなく、こちらへ書かせていただきました
fripper - 投稿数: 495
追伸:
素直に nginx などへ移行したほうが‥という説ももちろんあるのですが、
既存アーキテクチャからの移行が難しい部分もありまして‥といった次第です。
ワガママ申し上げて申し訳ないです