Bug #65230 [Wfx]: setting locale randomly broken

From: Date: Thu, 27 Mar 2014 11:13:15 +0000
Subject: Bug #65230 [Wfx]: setting locale randomly broken
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-184920@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=65230&edit=1 ID: 65230 Updated by: pajoye@php.net Reported by: xrstf-misc at yahoo dot com Summary: setting locale randomly broken Status: Wont fix Type: Bug Package: *General Issues Operating System: Windows 7 x64 PHP Version: 5.5.0 Block user comment: N Private report: N New Comment: It is somehow, not portable, not thread safe, etc. You should really really rely on intl's NumberFormatter, way better and portable. Previous Comments: ------------------------------------------------------------------------ [2014-03-27 10:18:19] cpuidle at gmx dot de It would at least help if the behavior was properly documented in setlocale... ------------------------------------------------------------------------ [2014-03-27 09:54:22] ab@php.net Related To: Bug #66962 ------------------------------------------------------------------------ [2013-08-02 16:47:23] ab@php.net And after all, locale has such issues on any platform. The solution is to use intl or custom localization functionality. ------------------------------------------------------------------------ [2013-07-30 15:54:08] ab@php.net This isnt 5.5 issue only, you can find it in any PHP version starting with 5.3. localeconv() isnt thread safe and using it with _configthreadlocale() might lead to unpredictable results. That's why bug #63688 was marked "won't fix" - a solution, if any, might be very tricky. ------------------------------------------------------------------------ [2013-07-09 22:45:26] xrstf-misc at yahoo dot com Description: ------------ I am experiencing trouble setting the locale (with setlocale(LC_ALL, ...)) in my code. With PHP 5.4, it always worked as expected, with 5.5 it appears that the locale has been changed, but localeconv() is still returning old values and functions like printf('%f') do not behave as expected. I have disabled the new Opcache, but the random behaviour persisted. I can't tell when it happens and why it sometimes doesn't work. It seems (to me) that there is some kind of threading problem, as I can have the same code in different browser tabs and get different results. I am using PHP 5.5.0 VC11 TS x86 on Windows 7 x64, loaded as a module into my Apache 2.4.3, which is running as a service. Test script: --------------- <?php function test($locale, $value) { $newlocale = setlocale(LC_ALL, $locale); $conv = localeconv(); $sep = $conv['decimal_point']; printf("%s\n--------------------------\n", $newlocale); printf(" sep: %s\n", $sep); printf(" %%f: %f\n", $value); printf(" %%F: %F\n", $value); printf("date: %s\n", strftime('%x')); printf("\n"); } test('german', 3.41); test('english', 3.41); test('french', 3.41); test('german', 3.41); Expected result: ---------------- German_Germany.1252 -------------------------- sep: , %f: 3,410000 %F: 3.410000 date: 10.07.2013 English_United States.1252 -------------------------- sep: . %f: 3.410000 %F: 3.410000 date: 7/10/2013 French_France.1252 -------------------------- sep: , %f: 3,410000 %F: 3.410000 date: 10/07/2013 German_Germany.1252 -------------------------- sep: , %f: 3,410000 %F: 3.410000 date: 10.07.2013 Actual result: -------------- German_Germany.1252 -------------------------- sep: . %f: 3.410000 %F: 3.410000 date: 10.07.2013 English_United States.1252 -------------------------- sep: . %f: 3.410000 %F: 3.410000 date: 7/10/2013 French_France.1252 -------------------------- sep: . %f: 3.410000 %F: 3.410000 date: 10/07/2013 German_Germany.1252 -------------------------- sep: . %f: 3.410000 %F: 3.410000 date: 10.07.2013 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=65230&edit=1

« previous php.bugs (#184920) next »