0

我有一个 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,它会在几分钟内不会出现(即服务数百个请求而没有任何警告),然后它会逐渐开始出现。

谢谢

4

1 回答 1

0

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

于 2012-07-18T15:12:29.663 回答