为什么PHP开发人员可以';t根据线程范围提供setlocale函数

为什么PHP开发人员可以';t根据线程范围提供setlocale函数,php,multithreading,apache,setlocale,Php,Multithreading,Apache,Setlocale,我们有 函数。此函数具有警告消息 区域设置信息是按进程维护的,而不是按线程维护的。如果在多线程服务器API(如Windows上的IIS或Apache)上运行PHP,则在脚本运行时,可能会遇到语言环境设置的突然变化,尽管脚本本身从未调用setlocale()。这是由于同时在同一进程的不同线程中运行的其他脚本使用setlocale()更改了进程范围的区域设置 例如,apache For windows具有MilithRead设置。我在PHP项目中发现了以下几行代码: # ifdef PHP_WIN3

我们有 函数。此函数具有警告消息

区域设置信息是按进程维护的,而不是按线程维护的。如果在多线程服务器API(如Windows上的IIS或Apache)上运行PHP,则在脚本运行时,可能会遇到语言环境设置的突然变化,尽管脚本本身从未调用setlocale()。这是由于同时在同一进程的不同线程中运行的其他脚本使用setlocale()更改了进程范围的区域设置

例如,apache For windows具有MilithRead设置。我在PHP项目中发现了以下几行代码:

# ifdef PHP_WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
# endif

如果此代码有效,为什么我们必须关注setlocale函数的警告?

您已经提供了答案:

区域设置信息是按进程维护的,而不是按线程维护的。[……]

这不是PHP的问题,这只是语言环境设置的工作方式。更改它适用于整个运行过程。这是一个不了解应用程序内部线程的系统设置

现在看来,由于Windows通过系统调用处理区域设置和线程,它可以完成不可思议的任务:为每个线程应用区域设置。
这里有一个参考:


所以,如果你在一个专门为此准备的系统上运行,你不需要在意。对于应用程序的可移植性,您仍然应该记住这一点。(尽管我相信Apache线程MPM并没有被广泛使用。)

也许它是一个WIP。您使用的setlocale中的哪些函数无法替换为其他函数?可能是。。。我不太了解C。。。我只使用PHP。。。PS:而且我的英语不好),所以它取决于操作系统(或操作系统版本)和web服务器管理系统?