Setlocale将小数点设置为点而不是昏迷

时间:2011-12-08 08:40:21

标签: php decimal locale

这仅发生在Windows 7上的IIS 7.5服务器上(在linux小数点上设置得很好)。

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

输出:

Polish_Poland.1250
grudzień
Array ( 
[decimal_point] => .
...
)

如你所见:

  1. 区域设置正常
  2. 月打印得很好
  3. 小数点为.,而应为,
  4. PHP是运行为FastCGI模块的VC9 TS,尝试从CLI运行,结果相同...

    知道为什么以及是否有修复?

1 个答案:

答案 0 :(得分:1)

如果在CLI级别发生这种情况,那么我会说这是PHP中的一个错误,应该报告(http://bugs.php.net)。

然而,在你这样做之前,你应该采取以下步骤,这样他们就不会对你大喊大叫:

  1. 确保您运行最新的稳定版PHP(5.3.8)!!他们会问你这个版本,如果你使用的是旧版本,他们可能会把它标记为伪造并告诉你下载当前版本。

  2. 使用相同的脚本在Linux中重复测试。结果将告诉您该错误是否特定于Windows生成。如果是,它可能会或可能不是Windows本身的问题(在这种情况下皮埃尔可能会有点恼火),但我会说它仍然值得发布,以便在错误跟踪器上有这个问题的记录。 / p>

  3. 这不是必需的,但是将您的脚本转换为PHPT文件然后发布可能会让您得到更快速的响应。

  4. 如果可能,请尝试在单独的Windows框中复制此错误,以便排除操作系统配置的问题。如果在Linux中也发生错误,您当然可以跳过此步骤。

  5. 发布错误后,请在此处发布指向该链接的链接。您可能会收到回复,要求提供更多信息,因此请密切关注并做好准备,不要太多延迟。

    此过程将确认它是否是PHP中的错误。如果它是一个错误,那么您的报告将导致下一个版本中的修复。如果发布了修补程序,我可以将其修补到源代码中,并向您发送一个自定义构建版本,直到下一个版本发布为止。

    哦,在一个不相关的说明中,你应该在IIS / FastCGI上使用PHP的ZTS版本!我不认为这与您遇到的问题有关,但如果继续使用该版本,您可能会遇到其他问题(性能下降,随机崩溃等)。你想要的是NTS(非线程安全)构建。

    以下是在Windows上运行PHP的基本经验法则:

    Apache:线程安全(ZTS)

    IIS ISAPI:线程安全(ZTS)

    IIS FastCGI:非线程安全(NTS)