LINUX.ORG.RU

Локаль по умолчанию в PHP

 ,


1

1

Добрый день. Столкнулся с тем, что php не воспринимает системные настройки локали:

root@test4:~# locale
LANG=ru_RU.CP1251
LANGUAGE=ru
LC_CTYPE="ru_RU.CP1251"
LC_NUMERIC="ru_RU.CP1251"
LC_TIME="ru_RU.CP1251"
LC_COLLATE="ru_RU.CP1251"
LC_MONETARY="ru_RU.CP1251"
LC_MESSAGES="ru_RU.CP1251"
LC_PAPER="ru_RU.CP1251"
LC_NAME="ru_RU.CP1251"
LC_ADDRESS="ru_RU.CP1251"
LC_TELEPHONE="ru_RU.CP1251"
LC_MEASUREMENT="ru_RU.CP1251"
LC_IDENTIFICATION="ru_RU.CP1251"
LC_ALL=
root@test4:~# php -r "echo (10.10);"
10.1
root@test4:~# php -r "echo setlocale(LC_ALL, 0);"
LC_CTYPE=ru_RU.CP1251;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
root@test4:~# php -r "setlocale(LC_NUMERIC,'ru_RU.CP1251'); echo (10.10);"  
10,1
root@test4:~# php -v
PHP 7.0.12-1+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.12-1+deb.sury.org~trusty+1, Copyright (c) 1999-2016, by Zend Technologies
root@test4:~# locale -a
C
C.UTF-8
POSIX
ru_RU.cp1251
ru_RU.utf8
Указание intl.default_locale в php.ini тоже не помогает. Можно как-то избежать использования setlocale() в коде?

★★★

Да, пишешь свои форматтеры всяких запятых и пробелов для циферек прямо внутри приложения и все.

deep-purple ★★★★★
()

CP1251

На винфак.

anonymous
()

LANG=ru_RU.CP1251

вдоль

anonymous
()

php не воспринимает системные настройки локали

Да.

Aceler ★★★★★
()
Ответ на: комментарий от deep-purple

Блин, все линуксоиды любят педалить велосипеды вместо использования норм решений или исправления багов?

kachan ★★
()
Ответ на: комментарий от kachan

Завтра, после переноса на другой сервак, он (или тот кто будет пользоваться тем, что он написал опираясь на локаль) прибежит с вопросом почему не работает опять, или работает не так как ожидалось.

Вот свежачок 2016 подтверждающий то о чем я (еловек и не чесался пока не напоролся): php float to string

С одной стороны, пых настолько расслабил пользующихся оным, что мало кто из, вообще знает о каких-то там локалях системы, поверх которой крутится пых, а поверх него их бложик/говнокодик на вордпрессе или прочей шулухе.

С другой стороны, даже если давным-давно кто-то бы и задал здравое использование пыха путем стократного повторения в мануалах про локали системы, то, на то время пых был еще просто поделкой и скорее всего сам по себе локали не умел:

setlocale (PHP 4, PHP 5, PHP 7)

А вы помните времена пыха третьего? Я его видел.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 2)
Ответ на: комментарий от deep-purple

Всё было бы хорошо, если бы это писал я. Но это обфусцированный zend guard код. На старом сервере работает нормально, но там убунта 10.04 и php5.2.

lizard ★★★
() автор топика

А мне это душу греет! Не хочу знать какая у хостера где-нибудь в выдумляндии локаль, когда мне надо на пользовательские куки только смотреть )).

Infra_HDC ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.