有时,服务器无法更改区域设置

时间:2012-07-18 15:02:07

标签: php apache locale

我的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,它将不会出现几分钟(即在没有任何警告的情况下提供数百个请求),然后它将逐渐开始出现。

谢谢

1 个答案:

答案 0 :(得分:0)

setlocale不是线程安全的(参见What does thread safe mean in a PHP context?。这就是Zend Framework实现自己的Locale系统的原因。