3

我写了这个测试脚本:

<?php
ini_set('error_reporting', E_ALL );
putenv('LC_ALL=ru_RU.UTF-8');
putenv('LANG=ru_RU');
putenv('LANGUAGE=ru_RU');
setlocale (LC_ALL, "ru_RU.UTF-8");
for($i=0; $i<7; $i++){
    echo setlocale(LC_ALL, 0) . "<br>\n";
    sleep(1);
}
?>

有输出:

ru_RU.UTF-8
ru_RU.UTF-8
C
ru_RU.UTF-8
ru_RU.UTF-8
ru_RU.UTF-8
C

为什么语言环境有时会崩溃?如何解决这个问题?

4

1 回答 1

0

http://php.net/manual/en/function.setlocale.php ...

警告:语言环境信息是按进程维护的,而不是按线程维护的。如果您在 Windows 上的 IIS 或 Apache 等多线程服务器 API 上运行 PHP,您可能会在脚本运行时遇到语言环境设置的突然更改,尽管脚本本身从未调用 setlocale()。这是由于其他脚本同时在同一进程的不同线程中运行,使用 setlocale() 更改了进程范围的语言环境。

我不是 PHP 专家,但我想一个简单的解决方法是首先使用正确的语言环境启动 PHP。你用 gentoo 标记了这个。如果您使用的是 Gentoo 而不是 Apache 的 mod_php,那么您应该能够使用 www-servers/spawn-fcgi 中的 /etc/init.d/spawn-fcgi(我写的)来设置 LC_ALL。有关详细信息,请参见 /etc/conf.d/spawn-fcgi。

于 2012-11-20T13:54:47.173 回答