проблема с локалью/strtolower

Андрейка

Senior pomidor developer
проблема с локалью/strtolower

некий хостинг с апачем и php 5.2.5 и стоимостью от 5 до 15 у.е.
есть простой скрипт

PHP:
<?php
var_dump(setlocale(LC_CTYPE, 'ru_RU.cp1251', 'ru_RU.CP1251')); // либо LC_ALL
var_dump(strtolower('Фиговина'));
var_dump(strtolower('Тополь-М'));
echo aaa('ЛяЛяЛя Тополя'); // код функции смотреть смысла нет, но он здесь http://www.pastebin.ru/292891
выводящий (обновляю страничку раз в секунду) в зависимости от настроения либо
string(12) "ru_RU.CP1251" string(0) "" string(1) "-" _
либо
string(12) "ru_RU.CP1251" string(8) "фиговина" string(8) "тополь-м" ljaljalja_topolja

собственно вопрос - почему так хитро получается?
 

tony2001

TeaM PHPClub
http://php.net/setlocale
Warning

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale().
?
 

Андрейка

Senior pomidor developer
tony2001
FreeBSD6.2 / вроде Apache2 с неизвестными настройками... но

добавил в конец скрипта
PHP:
echo apache_get_version();
var_dump(setlocale(LC_CTYPE, 0));
получилось
string(12) "ru_RU.CP1251" string(0) "" string(1) "-" _Apachestring(12) "ru_RU.CP1251"

вроде вероятность изменения локали на неправильную сразу же после первого setlocale и возврат её к нужной до последнего setlocale очень маловероятен %)
 

Андрейка

Senior pomidor developer
ага, апач даже первый
Код:
Server version: Apache/1.3.37 (Unix)
Server built:   Nov 2007
Server's Module Magic Number: 19990320:18
Server compiled with....
 -D EAPI
 -D HAVE_MMAP
 -D USE_MMAP_SCOREBOARD
 -D USE_MMAP_FILES
 -D HAVE_FLOCK_SERIALIZED_ACCEPT
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D DYNAMIC_MODULE_LIMIT=64
 -D HARD_SERVER_LIMIT=2048
 -D SO_ACCEPTFILTER
 -D ACCEPT_FILTER_NAME="httpready"
 -D HTTPD_ROOT="/usr/local/apache"
 -D SUEXEC_BIN="/usr/local/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/httpd.scoreboard"
 -D DEFAULT_LOCKFILE="logs/httpd.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
 -D ACCESS_CONFIG_FILE="conf/access.conf"
 -D RESOURCE_CONFIG_FILE="conf/srm.conf"
 
Сверху