PHP, Linux, FC8 - как настроить локаль?

Crys

Двинутый новичок
PHP, Linux, FC8 - как настроить локаль?

По-умолчанию - локаль en_US.UTF-8

Мне нужно чтобы в PHP включалась ru_RU.UTF-8
В консоле делаю:


[root@localhost ~]# localedef -f UTF-8 -i ru_RU ru_RU.UTF-8
[root@localhost ~]# export LANG=ru_RU.UTF-8
[root@localhost ~]# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
[root@localhost ~]# date
Чтв Май 8 20:42:10 EEST 2008
[root@localhost ~]#


после выхода из сессии локаль обратно сбрасывается на en_US.UTF-8
в php естественное ничего не меняется

как правильно настроить локаль?
 

Crys

Двинутый новичок
Или лыжы не едут...

Второй день мучаюсь. Ничего не получается :(

Локаль вроде как настроил...

<?php
var_dump(setlocale(LC_CTYPE, 0));
print strtoupper('б');
?>

Итог:

string(11) "ru_RU.utf-8"
б




Apache:

[root@mol ~]# httpd -V
Server version: Apache/2.2.6 (Unix)
Server built: Sep 18 2007 03:54:41
Server's Module Magic Number: 20051115:5
Server loaded: APR 1.2.11, APR-Util 1.2.10
Compiled using: APR 1.2.11, APR-Util 1.2.10
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"


PHP:

[root@mol ~]# php --version
PHP 5.2.4 (cli) (built: Oct 16 2007 09:13:35)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

=======

End :(

-~{}~ 10.05.08 16:48:

crocodile2u
setlocale было не причем. И сейчас вроде как локаль нормально выставляется, тока обработка русского текста не работает.
Когда-то была такая проблема, но рядом был хороший вменяемый сисадмин, который быстро все настроил. Сейчас вот сам пытаюсь настроить линуху... и то понос, то золотуха :(

-~{}~ 10.05.08 18:52:

Ребята, говорите что-нибудь... а то такое ощущение, что форум вымер :(((
 

alexcrown

Новичок
Функция strtoupper не умеет работать с юникод-строками. Используйте функцию mb_strtoupper. Вменяемый админ скорее всего настроил автоматическую перегрузку некоторых строковых функций (http://ru2.php.net/manual/en/mbstring.overload.php )
 

crocodile2u

http://vbolshov.org.ru
Crys
А, это alexcrown вполне прав. PHP не умеет работать с юникодом, это самая ожидаемая фича PHP-6, которого пока еще нема.
 

Crys

Двинутый новичок
PHP:
print setlocale(LC_ALL, 'ru_RU.utf-8');
print '<br>'.mb_strtoupper('абв');
out:

ru_RU.utf-8
абв
 

alexcrown

Новичок
mb_* функции требуют установки внутренней кодировки. Вызывай в начале mb_internal_encoding('UTF-8') ил явно указывайте в функции mb_strtoupper('абв','UTF-8')
 
Сверху