私は時々Apacheのエラーログで奇妙な警告を引き起こすPHPスクリプトに関する問題を抱えています。
bash: warning: setlocale: LC_ALL: cannot change locale (fr_FR.utf8)
bash: warning: setlocale: LC_ALL: cannot change locale (fr_FR.utf8)
bash: warning: setlocale: LC_ALL: cannot change locale (fr_FR.utf8)
bash: warning: setlocale: LC_ALL: cannot change locale (fr_FR.utf8)
以下はこの警告を生成するコードです。 (これはgettextを設定するために使われます)。
$lang='fr_FR.utf8';
$filename = 'default';
putenv("LC_ALL=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain($filename, './config/locale');
bind_textdomain_codeset($filename, "UTF-8");
textdomain($filename);
奇妙なことは、警告が体系的に表示されないということです。 Apacheを再起動しても、数分間表示されず(何の警告もなく何百ものリクエストを処理した後)、次第に表示され始めます。
ありがとうございました
setlocale
スレッドセーフではありません(参照スレッドセーフはPHPのコンテキストではどういう意味ですか?。そのため、Zend Frameworkは独自のロケールシステムを実装しています。