|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2021-01-25 12:16 UTC] cmb@php.net
-Status: Open
+Status: Not a bug
-Assigned To:
+Assigned To: cmb
[2021-01-25 12:16 UTC] cmb@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 04:00:01 2025 UTC |
Description: ------------ Hi, I'm facing a bug related to Gettext, Apache2 and mod_php, a NFS mount point and atomic .mo file creation. This problem doesn't occur on local file system, or while overwriting .mo files. How to reproduce : put your gettext files (.mo) on a NFS share, change the translated phrase and format them using a temporary file, to be an atomic change : msgfmt -o /tmp/messages.mo /var/local/medias/small/data/test_gettext/en_GB/LC_MESSAGES/messages.po && mv /tmp/messages.mo /var/local/medias/small/data/test_gettext/en_GB/LC_MESSAGES/messages.mo I have to use atomic change, cause it is a high loaded server and if I didn't do that, the new .mo file is partially read and cached, so I got partially translated phrases. Test script: --------------- <?php $locale = 'en_GB'; $langue = substr($_GET['locale'], 0, 2); //$bdpath = dirname($_SERVER['SCRIPT_FILENAME']); $bdpath = '/var/local/medias/small/data/test_gettext'; // NFS mount point bindtextdomain('messages', $bdpath); textdomain('messages'); bind_textdomain_codeset('messages', 'UTF-8'); $local = setlocale ( LC_MESSAGES , $locale . '.utf8' ); putenv ( "LANG=" . $locale ); putenv ( "LANGUAGE=" . $locale ); $st = stat($bdpath."/".$locale."/LC_MESSAGES/messages.mo"); echo date("H:i:s")." inode: ".$st[1]." mtime: ".$st[8]." text: "._("bonjour le monde")."\n"; Expected result: ---------------- HELLO WORLD Actual result: -------------- // if I rm the .mo files, some apache2 process display : bonjour le monde // else, I got the old phrase : hello world