Для каждого php-приложения очень желательно жестко настроить локаль, чтобы не зависеть от настроек сервера. Иначе, по "закону подлости" - в самый неподходящий момент могут возникнуть проблемы с отображением данных. Причем, "артефакты" могут вылезти не только после переезда/миграции на другой сервер, но и даже как будто вообще без причины.

Как установить локаль для PHP - set locale for 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 можно указать отдельный параметр, на которые будет влиять локаль:

  • LC_COLLATE – функции сравнения строк
  • LC_CTYPE – функции преобразования и классификации строк
  • C_MONETARYL – для функции localeconv()
  • LC_NUMERIC – задает символ десятичного разделения
  • LC_TIME – форматирование даты/времени
  • LC_MESSAGES – для системных сообщений

 

Установка часового пояса:

Часовой пояс Москвы (UTC + 3):

 

date_default_timezone_set('Europe/Moscow');

 

Часовой пояс UTC:

 

date_default_timezone_set('GMT');

 

Все варианты временных зон - на сайте php.net.

 

Комментарии (0)

Здесь не опубликовано еще ни одного комментария

Оставьте свой комментарий

  1. Опубликовать комментарий как Гость.
0 Значки
Вложения (0 / 3)
Поделитесь своим местоположением

      iPad или Android?
      iPad или Android?

      Не так давно заглянул я в один из крупных магазинов компьютерной и цифровой техники, имеющийся в нашем городе. Зашел я туда просто из любопытства - посмотреть представленный ассортимент в целом и уровень цен - благо, время на это было. В таких магазинах (если нет аншлага) обычно сразу к вам подбегает аккуратный мальчик или девочка с предложением помочь. Чаще всего, как и в этот раз, я...




      Фразы про МУЗЫКУ (MUSIC)
      Фразы про МУЗЫКУ (MUSIC)

      Выражения, в которых используется слово МУЗЫКА (MUSIC), использование их в повседневной английской речи и сравнение с русскими аналогами. 1. AND ALL THAT JAZZ (досл. «и весь этот джаз»). По-русски это означает: и все, что с этим связано (в контексте того, о чем идет речь).Пример: She likes cooking and all that jazz.Она любит готовить и все, что с этим связано.




      Как распознать музыку
      Как распознать музыку

      Бывает, услышишь мелодию и сразу хочется узнать, что это за композиция, кто автор, кто исполнитель этого шедевра??? К сожалению иногда играть в игру "Угадай мелодию" довольно сложно - за 2000 с лишним лет люди придумали столько песен, столько мелодий..., что все запомнить ну просто не реально. Тем более, что многие из них, особенно попсовые иногда очень похожи.




      Авиационное озеро в Китае
      Авиационное озеро в Китае

      В китайской провинции Гуандун (называемая также, как Кантон - Kwangtung) возле города Хэюань (Heyuan / 河源 市) находится озеро Ванлю (万绿湖), оно же - Синьфэнцзянское водохранилище (Xinfengjiang Reservoir / 新丰 江 水库), по своей форме напоминающее самолет: Наибольшее сходство с очертанием самолета дает цифровая карта Яндекса, на других картах с большей деталлизацией это не так сильно заметно.




      Что такое UDID и как его узнать для своего устройства?
      Что такое UDID и как его узнать для своего устройства?

      UDID (Unique Device Identifier) - уникальный идентификатор устройства, состоящий из 40 символов. Он есть у каждого мобильного i-устройства: iPad, iPhone или iPod Touch. UDID может использоваться, например, для бета-тестирования программ. Вы предоставляете разработчику программы свой UDID, он же, в свою очередь, предоставляет вам приложение для бета-тестирования.




      Маразмы-Афоризмы УВАУ ГА
      Маразмы-Афоризмы УВАУ ГА

      Данное эксклюзивное "литературное" произведение было собрано, сверстано, напечатано в нескольких экземплярах в виде брошюры размером А5 и, конечно же, размещено на просторах Интернета выпускниками факультета УВД (Управление Воздушным Движением) 2003 года Ульяновского высшего авиационного училища гражданской авиации (УВАУ ГА). Курсанты группы Д11/51-98 в течение 5 лет не только смеялись над друг...




      Награда
      Награда

      Интересная необычная история (или сказка?) про рыцаря, поразившего дракона.  



Яндекс.Метрика
Сайт работает на быстром VPS/VDS хостинге от FASTVPS