2014-11-05 77 views
0

我買了當前項目的一個問題我的工作,我需要一些幫助:在PHP檢測OS運行

  1. 功能strtoupper()mb_strtoupper()等工作不
  2. 我需要設置正確語言環境,使他們的工作
  3. 爲此我需要知道PHP OS是乳寧的,因爲對於Windows正確的命令是setlocale(LC_ALL, "rus");setlocale(LC_ALL, "Russian_Russia.1251");和他人(我不知道對於所有其他與否)是setlocale(LC_ALL, 'ru_RU');

但是,我發現所有的操作系​​統檢測方法使用strupper()/strtolower()來檢測OS ...所以現在我有些困惑。我該怎麼辦。如何檢測操作系統...

順便說一下,性能是至關重要的,如果有人知道好的和快速的方法來檢測操作系統或設置正確的語言環境,它將是偉大的!

回答

5

setlocale支持傳遞多個區域設置,它會選擇第一個可用的區域。所以:

setlocale(LC_ALL, 'rus', 'Russian_Russia.1251', 'ru_RU'); 

這個工程是跨平臺的。

+0

謝謝,就是這樣!我認爲我必須再次閱讀芒:)但還有一個問題:現在setlocale是正確的,但strtoupper不工作...例如對於單詞'мама'strtoupper返回'УаУа'和mb_strtoupper返回'мама'。任何想法爲什麼? – RAMe0 2014-11-05 08:22:53

+0

你永遠不應該停止閱讀芒! ; P – deceze 2014-11-05 08:24:25

+0

不知道有關不正確的轉換。我甚至不知道什麼是正確的結果。 – deceze 2014-11-05 08:37:00

0

PHP_OS 不變的是你在找什麼 - docs

但你實際觀察一下自己是什麼方法,什麼是錯的呢?

1

phpinfo()是要走的路。它給你所有你需要的。

1

這不是你的方式。一切都很簡單:

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); 

// ru_RU.CP1251 for FreeBSD 
// rus_RUS.CP1251 for Linux 
// Russian_Russia.1251 for Windows