kos*_*tyl 2 php apache multithreading setlocale
我们 在PHP中有setlocale函数.此功能有警告消息
每个进程维护语言环境信息,而不是每个线程.如果您在Windows上运行多线程服务器API(如IIS或Apache)上的PHP,则在脚本运行时可能会遇到区域设置的突然更改,尽管脚本本身从未调用过setlocale().这是因为其他脚本同时在同一进程的不同线程中运行,使用setlocale()更改进程范围的语言环境.
例如,带有miltithread设置的windows的apache.我在PHP项目中找到了这些代码行:
# ifdef PHP_WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
# endif
Run Code Online (Sandbox Code Playgroud)
如果这段代码有效,为什么我们必须关心setlocale函数的警告?
你已经提供了答案:
每个进程维护语言环境信息,而不是每个线程.[...]
这不是PHP问题,而是区域设置的工作原理.更改它适用于整个运行过程.这是一个不了解应用程序内部线程的系统设置.
现在看来,由于Windows通过系统调用处理语言环境和线程,它可以完成不可思议的任务:应用每个线程的语言环境设置.
这是一个参考:http:
//msdn.microsoft.com/en-us/library/ms235302(v = vs.80).aspx
因此,如果您运行的是专门为此准备的系统,则无需关心.为了便于您的应用程序,您仍应牢记这一点.(尽管我认为Apache广泛使用的MPM并没有被广泛使用.)
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |