From: nicos at worldakt dot com Operating system: FreeBSD PHP version: 4.3.3 PHP Bug Type: *Languages/Translation Bug description: setlocale() does not work under FreeBSD
Description: ------------ setlocale() fails under FreeBSD 4.8: [Fri Oct 31 - 17:56:28 - root /httpd/php-4.3.3]# cat configure.log | grep locale checking for locale.h... (cached) yes checking for setlocale... (cached) yes checking for localeconv... (cached) yes [Fri Oct 31 - 17:56:45 - root /httpd/php-4.3.3]# In fact, setlocale returns FALSE but no E_WARNING or anything. After looking in ext/standard/string.c it looks like it can happen when HAVE_SETLOCALE is not defined... But HAVE_SETLOCALE is defined. Another solution is that, setlocale() call fails: retval = setlocale (cat, loc); We've got an if (retval) { } but no else... According to freebsd's man, setlocale returns NULL on failure. I added: else { /* setlocale failed */ efree(args); php_error_docref(NULL TSRMLS_CC, E_WARNING, "setlocale failed!"); RETURN_FALSE; } And I get the E_WARNING, so it means setlocale() call failed, but why ? the same scripts works fine under linux but not under freebsd4.8. After looking in /usr/share/locale, we have: /usr/share/locale/fr_FR.ISO8859-1: LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME /usr/share/locale/fr_FR.ISO8859-15: LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME /usr/share/locale/fr_FR.ISO_8859-1: LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME /usr/share/locale/fr_FR.ISO_8859-15: LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME so it should work. If I have change fr_FR to fr_FR.ISO_8859-1 in the setlocale call, the script works fine, isn't setlocale() supposed to use default charset which is ISO_8859-1 ? In any case the documentation does not mention that we have to add the charset under FreeBSD... Reproduce code: --------------- setlocale(LC_TIME, "fr_FR"); echo strftime("%B %Y",$timestamp); Expected result: ---------------- TRUE Octobre 2003 Actual result: -------------- FALSE October 2003 -- Edit bug report at http://bugs.php.net/?id=26052&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=26052&r=trysnapshot4 Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=26052&r=trysnapshot5 Fixed in CVS: http://bugs.php.net/fix.php?id=26052&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=26052&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=26052&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=26052&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=26052&r=support Expected behavior: http://bugs.php.net/fix.php?id=26052&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=26052&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=26052&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=26052&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=26052&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=26052&r=dst IIS Stability: http://bugs.php.net/fix.php?id=26052&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=26052&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=26052&r=float