我的PHP脚本有时会在Apache错误日志中触发奇怪的警告:
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,它将不会出现几分钟(即在没有任何警告的情况下提供数百个请求),然后它将逐渐开始出现。
谢谢
答案 0 :(得分:0)
setlocale
不是线程安全的(参见What does thread safe mean in a PHP context?。这就是Zend Framework实现自己的Locale系统的原因。