У меня php_mod
7.2.31 работает под LightSpeed, локаль среды - UTF8. Мой очень маленький тестовый проект должен работать только с данными ASCII, поскольку env. локаль - UTF8, проверка ctype_alnum()
перекосилась. Я мог бы решить эту проблему, вызвав setlocale()
, однако, согласно документации, setlocale()
небезопасно в многопоточной среде:
Предупреждение. Информация о языковом стандарте сохраняется для каждого процесса, а не для потока. Если вы используете PHP на многопоточном серверном API, таком как IIS, HHVM или Apache на Windows, вы можете столкнуться с внезапными изменениями в настройках локали во время работы сценария, хотя сам сценарий никогда не вызывал setlocale (). Это происходит из-за того, что другие сценарии работают в разных потоках одного и того же процесса одновременно, изменяя локаль всего процесса с помощью setlocale ().
Думаю, это имеет смысл. Хостинг управляется моим провайдером, поэтому я не знаю всех подробностей о нем, но в целях безопасности предполагаю, что он многопоточный. Как люди справляются с такими случаями? Мои предположения на данный момент:
- Отказаться и обработать все в UTF / multibyte
- Использовать preg_match () (как и при любом сопоставлении регулярных выражений на любом другом языке, я предполагаю, что он всегда медленнее, чем родной инструменты строки / символов)
- Использовать какой-нибудь умный механизм для управления языками / кодировками?