3 votes

Setlocale met le point décimal en point au lieu de coma

Ce problème ne se produit que sur un serveur IIS 7.5 sous Windows 7 (sous Linux, le point décimal est bien placé).

$locale = setlocale(LC_ALL, 'pl_PL.utf8', 'pl_PL', 'pl', 'polish');
echo $locale;
echo strftime('%B');
print_r(localeconv());

Sortie :

Polish_Poland.1250
grudzien
Array ( 
[decimal_point] => .
...
)

Comme vous pouvez le voir :

  1. Les localisations sont correctes
  2. Le mois est très bien imprimé
  3. Le point décimal est . alors qu'il devrait être ,

PHP est VC9 TS et s'exécute en tant que module FastCGI. J'ai essayé de l'exécuter depuis la CLI avec le même résultat...

Vous savez pourquoi et s'il existe une solution ?

2voto

Kris Craig Points 525

Si cela se produit au niveau de l'interface CLI, je dirais qu'il s'agit d'un bogue dans PHP et qu'il faut le signaler (http://bugs.php.net).

Mais avant de le faire, vous devez prendre les mesures suivantes pour qu'ils ne vous crient pas dessus :

  1. Assurez-vous que vous utilisez la dernière version stable de PHP (5.3.8) ! Ils vous demanderont la version, et si vous utilisez une version plus ancienne, ils la marqueront probablement comme fausse et vous diront de télécharger la version actuelle.

  2. Répétez le test sous Linux en utilisant le même script. Le résultat vous indiquera si le bogue est spécifique à la build Windows ou non. Si c'est le cas, il peut s'agir ou non d'un problème avec Windows lui-même (auquel cas Pierre pourrait être un peu ennuyé), mais je dirais que cela vaut quand même la peine de le poster pour qu'il y ait un enregistrement de ce problème sur le bug tracker.

  3. Ce n'est pas obligatoire, mais convertir votre script en un fichier PHPT et le poster ensuite pourrait vous permettre d'obtenir une réponse plus rapide.

  4. Si possible, essayez de reproduire ce bogue sur une autre machine Windows afin d'exclure tout problème lié à la configuration de votre système d'exploitation. Vous pouvez bien sûr sauter cette étape si le bogue se produit également sous Linux.

Une fois le bogue publié, veuillez poster un lien vers celui-ci ici. Vous recevrez probablement des réponses demandant des informations supplémentaires, alors gardez un œil dessus et soyez prêt à le faire sans trop tarder.

Ce processus permettra de confirmer s'il s'agit ou non d'un bogue dans PHP. Si c'est le cas, votre rapport conduira à un correctif dans la prochaine version. Si un correctif est publié, je peux l'intégrer dans les sources et vous envoyer une version personnalisée à utiliser jusqu'à la sortie de la prochaine version.

Oh et sur une note sans rapport, vous devriez no utiliser la version ZTS de PHP sur IIS/FastCGI ! Je ne pense pas que cela soit lié au problème que vous rencontrez, mais vous pourriez rencontrer d'autres problèmes (baisse de performance, crashs aléatoires, etc) si vous continuez à utiliser cette version. Ce que vous voulez, c'est la version NTS (non-thread-safe).

Voici les règles de base pour exécuter PHP sous Windows :

Apache : Sécurité des fils (ZTS)

IIS ISAPI : Thread-safe (ZTS)

IIS FastCGI : Non-thread-safe (NTS)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X