У нас есть функция setlocale в PHP. Эта функция имеет предупреждающее сообщение
Информация о локали поддерживается для каждого процесса, а не для потока. Если вы используете PHP на API с многопоточным сервером, например IIS или Apache в Windows, вы можете столкнуться с внезапными изменениями в настройках языка во время работы скрипта, хотя сам сценарий никогда не назывался setlocale (). Это происходит из-за того, что другие скрипты работают в разных потоках одного и того же процесса в одно и то же время, изменяя язык всей системы с помощью setlocale ().
Например, apache для окон с настройками miltithread. Я нашел эти строки кода в проекте PHP:
# ifdef PHP_WIN32 _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); # endif
Если этот код работает, почему мы должны заботиться о предупреждении функции setlocale?
Вы уже дали ответ:
Информация о локали поддерживается для каждого процесса, а не для потока. […]
Это не проблема с PHP, вот как работают языковые настройки. Его изменение относится ко всему запущенному процессу. Это системный параметр, который не знает о вашей прикладной внутренней потоковой передаче.
Теперь, когда Windows обрабатывает как локаль, так и потоки через системные вызовы, она может выполнить немыслимую задачу: применить настройки локали для потока.
Вот ссылка: http://msdn.microsoft.com/en-us/library/ms235302(v=vs.80).aspx
Поэтому, если вы запускаете систему, специально подготовленную для этого, вам не нужно заботиться. Для переносимости ваших приложений вы все равно должны помнить об этом. (Хотя App Threading MPM не используется, насколько я считаю.)