2012-11-20 30 views
3

我已經寫了這個測試腳本:使用UTF-8下降

<?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 

爲什麼區域有時會崩潰?如何解決這個問題?

+0

升級到最新的穩定PHP,仍然在發生?提交您的操作系統和PHP版本的錯誤。 – JamieL

回答

0

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

警告:區域設置信息每個進程維持,而不是每個 線程。如果您在多線程服務器API(如IIS 或Windows上的Apache)上運行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。