Для каждого php-приложения очень желательно жестко настроить локаль, чтобы не зависеть от настроек сервера. Иначе, по "закону подлости" - в самый неподходящий момент могут возникнуть проблемы с отображением данных. Причем, "артефакты" могут вылезти не только после переезда/миграции на другой сервер, но и даже как будто вообще без причины.
Как раз подобный случай и произошел недавно с одним web-сервисом, реализованным на PHP.
Один из скриптов отображал в интерфейсе приложения срок действия базы данных (совпадает с циклами AIRAC), и администратор этого сервиса заметил странную штуку: срок действия февральской базы данных - цикл 2102 имел весьма странный срок действия - с 25 января 2021 по 25 января 2021, хотя должен был иметь срок действия с 25 февраля 2021 по 25 марта 2021.
Различные проверки и эксперименты с PHP-скриптом показали, что он выдает дату в формате, у которого сокращенное название месяца выводится на русском языке: 2021-Фев-25 и 2021-Мар-25. А приложение, которое использует данные API, совсем не понимает по-русски, ему необходимо давать всё на английском языке! Соответственно, оно не понимало, какой ему передается месяц и правращало его по умолчанию в первый месяц года.
Причину данного сбоя выяснить не удалось, миграция сервиса точно не выполнялась :), проводились ли какие-то работы на сервере - пока узнать не получилось. Наиболее вероятно, что системный администратор сервера изменил язык сервера по умолчанию на русский. Поэтому была выполнена настройка локали для PHP с указанием английского языка. В PHP-скрипт была добавлена строка:
setlocale(LC_ALL, 'en_US', 'en_US.UTF8', 'en', 'english');
Можно было добавить в сокращенном виде:
setlocale(LC_TIME, "en_US.UTF-8");
Важно: не перепутать и корректно указать индекс языка - английских языков несколько, не стоит писать en_En (нет такой локализации!), есть: en_Gb, en_Us, en_Au, en_Bz, en_Ca, en_Ie, en_Jm, en_Nz, en_Za, en_Tt.
Вместо глобальной настройки LC_ALL можно указать отдельный параметр, на которые будет влиять локаль:
Часовой пояс Москвы (UTC + 3):
date_default_timezone_set('Europe/Moscow');
Часовой пояс UTC:
date_default_timezone_set('GMT');
Все варианты временных зон - на сайте php.net.
Ведущий: Ежедневно тысячи людей попадают в кpитические ситуации, безвыходные положения, ломают pуки и ноги. Помочь им в этом пpизвана наша пpогpамма и служба "Спасение 911". Приободрить людей, попавших в беду, свести все к шутке - в этом состоит наша главная задача. И об одном таком случае, случившемся в Рождество, я не имею пpава молчать. Да, собственно, не очень-то и хочется.
Современные web-технологии поддерживают не только якобы сложные русские тексты (по сравнению с попсовой латиницей), но и всякие китайские и японские иероглифы и другие непонятные загогулины. Но раньше такого счастья не было, и web-разработчикам приходилось использовать специальные комбинации знаков для кодирования специальных символов, таких как вопросительный знак, восклицательный знак,...
Навигаторы Garmin считаются одними из лучших, причем, не важно, какие это навигаторы: туристические, автомобильные, морские или авиационные - профессионалы предпочитают приборы Garmin (очень похоже на рекламу, но факт остается фактом). В зависимости от типа навигатора и частоты его использования необходимо поддерживать в актуальном состоянии его базы данных. Например, если туристический...
Не смотря на тесную дружбу Jeppesen и Garmin, программы и файлы этих разных производителей, увы, не дружат. И пользователям приходится ломать голову, над той или иной задачей, которая подразумевает использование файлов одного типа в программах другого типа. Например, может возникнуть необходимость отобразить какой-либо GPS-трек, записанный с помощью навигатора Garmin, на карте в программе...
Пользователи, имеющиие iPad рано или поздно сталкиваются с необходимостью расширить функционал устройства, так нещадно ограниченный яблоневодами. К их сожалению (да и к моему тоже) список дополнительных девайсов для яблочных огрызков весьма мал, зато стоимость зато весьма высока. Напрягает отсутствие полноценного USB-подключеия и файлового менеджера. Хоть разработчики и утверждают, что при...
По причине не простой процедуры получения эксплуатационного одобрения по использованию EFB в некоторых странах и необходимости конкретно указывать номер версии используемого в EFB ПО для программ Типа A и Типа B, Jeppesen с помощью Apple реализовал возможность использовать определенную версию программы Jepp FP PRO без обновления до крайней версии. Но у этого метода есть один серьезный недостаток - программа,...
20 октября 2014 года в аэропорту Москва Внуково произошла авиакатастрофа с самолетом Falcon 50EX французской авиакомпании UniJet (регистрационный номер F-GLSA). При выполнении взлета ночью в сложных метеоусловиях воздушное судно столкнулось со снегоочистителем, совершившим несанкционированный выезд на ВПП. Конечно же было проведено тщательное расследование данного происшествия, были определены все причины -...