PHP - 随机循环行为问题

Seb*_*ebj 11 php prestashop prestashop-1.6

我实际上面临一个基于Prestashop的几个网站(实际上是3个)的大问题.问题是PHP或Prestashop随机地将价格舍入到最接近的整数,并且它不是系统的.

大多数时候,它应该是完美的,但有时候(两个问题可能需要数周或数月),价格是四舍五入的.我的圆形模式选项被正确设置为显示两位小数.

在后台编辑产品价格或客户处于结账步骤时,可能会出现此问题.

我试图重现这个问题,所以我创建了一个基本测试:我检索购物车信息,然后显示它的价格.我多次刷新页面,我看到价格只有几次.最有趣的是,在测试的开始和结束之间,上下文和代码都没有变化.

我在谷歌搜索帮助,似乎没有人有这个问题......

有人遇到这个问题吗?你认为它是PHP问题还是Prestashop问题?在此先感谢您的帮助.

以下是Prestashop正在使用的循环函数的代码:

round($value, 2, PHP_ROUND_HALF_UP);
Run Code Online (Sandbox Code Playgroud)

有关信息,请参阅PHP 5.4.39的版本.

Seb*_*ebj 2

两年多后,我们解决了这个问题。这是由于 php5-fpm 不处理每个线程的语言环境,而是每个进程。PHP 文档中说得很清楚:

警告 区域设置信息是按进程维护的,而不是按线程维护的。如果您在 Windows 上的 IIS、HHVM 或 Apache 等多线程服务器 API 上运行 PHP,则在脚本运行时您可能会遇到区域设置突然发生变化的情况,尽管脚本本身从未调用过 setlocale()。发生这种情况的原因是其他脚本同时在同一进程的不同线程中运行,使用 setlocale() 更改进程范围的区域设置。

由于小数分隔符已更改,PHP 无法识别小数并截断了我的数字。