Timezonedb php что это

Информация для абонентов

Веб-сервисы

Оборудование

Обновление часовых поясов для php на сервере FreeBSD

#0. Резюме

Помимо основной базы системных часовых поясов на сервере, некоторые веб-службы, такие как php, используют свои собственные часовые пояса. В итоге можно наблюдать картину, когда время в php-скриптах отстаёт или опережает системное.

Как видим, системное время и время php различаются. Чтобы этого избежать, помимо обновления системных часовых поясов, требуется отдельно обновлять timezone (zoneinfo) для серверных приложений php (mysql, postgresql, java и т.п.).

#1. Обновление часовых поясов в php через pecl

Если на сервере присутствует утилита pecl, обновление часовых поясов проще простого. Проверяем, установлен ли модуль timezonedb.

Вывод не пустой, значит установлен, обновляем.

Если же модуль php timezonedb не был установлен, установим его.

Проверяем теперь соответствие между системным временем и временем интерпретатора php.

Время системное и время интерпретатора совпадает! Не забываем перезапустить службу, из-под которой запущен обработчик php (apache, php-fpm или др.).

#2. Обновление часовых поясов в php ручной установкой модуля timezonedb

Компилируем исходный код и устанавливаем в систему новый timezonedb.

Проверяем, был ли ранее установлен модуль timezonedb.

В данном примере timezonedb был установлен ранее, поэтому действий больше не требуется, а если же вывод будет пустым, необходимо указать php при запуске подгружать новый модуль timezonedb.

Удаляем временные файлы.

Проверяем теперь соответствие между системным временем и временем интерпретатора php.

Время системное и время интерпретатора совпадает! Не забываем перезапустить службу, из-под которой запущен обработчик php (apache, php-fpm или др.).

Источник

Установка временнОй зоны в PHP

Иногда возникает такая ситуация, что текущее время на сервере не соответствует вашему текущему часовому поясу или часовому поясу региона, на который ориентирован ваш сайт.

Чтобы было понятно, напомню: территориально Россия очень большая, и далеко не всем нужно, чтобы их сайты «жили» по московскому времени. Например, Урал, Сибирь, Дальний восток и т.д.

Серверы большинства популярных российских хостинг-провайдеров размещены на технологических площадках Москвы и Санкт-Петербурга и по-умолочанию настроены, естественно, на московскую временну́ю зону. Сервер не может автоматически подстраиваться под ваше текущее местоположение и переводить системные часы. В связи с чем, работа функций даты и времени на сайте может быть не совсем корректной. Естественно, сейчас речь не идёт о CMS, в которых поправка часового пояса обычно присутствует прямо в интерфейсе администратора.

В первую очередь проверьте текущее состояние с помощью PHP-кода:

Хорошо, если у вас свой сервер и имеется доступ к php.ini, где можно задать нужную временну́ю зону и забыть. Например, таким образом:

Правда, если на сервере размещены несколько проектов, в которых должны поддерживаться различные часовые пояса, тогда лучше этого не делать. В этом случае будет правильнее задать временные зоны только для проектов, где один часовой пояс.

Установка временной зоны на виртуальном хостинге

Если способ не сработает, тогда воспользуемся функцией date_default_timezone_set(), которая устанавливает временную зону по умолчанию для всех функций даты и времени. Для этого нужно где-нибудь в начале скрипта просто добавьте такую строку:

Естественно, Europe/Moscow меняется на необходимый вам часовой пояс. Для территории РФ в PHP поддерживаются следующие временные зоны:

Со списком всех доступных временных зон можно ознакомиться по ссылке или выполнить команду, которая возвратит вам список временных зон, доступных на вашем сервере.

Делаю сайты на Вордпресс с 2008 года. Не просто сайты, а уникальные инструменты для решения сложных бизнес‑задач с оптимизацией и поддержкой.

Источник

Пользовательские часовые пояса

Timezonedb php что это. user defined timezones in laravel. Timezonedb php что это фото. Timezonedb php что это-user defined timezones in laravel. картинка Timezonedb php что это. картинка user defined timezones in laravel

Как работать в одном приложении со множеством часовых поясов, которые выбирают сами пользователи, но при этом в базе данных все временные метки будут храниться в едином UTC-формате, либо в часовом поясе заданном по умолчанию в приложении, что позволит нам отображать одну и ту же информацию по-разному без нарушения ее целостности.

Часовые пояса в PHP и MySQL

Также его можно задать на системном уровне:

Все часовые пояса, которые поддерживает PHP, можно увидеть здесь.

Также можно задать глобальную переменную:

Если мы используем PDO, то можем задать часовой пояс для каждого соединения, указая GMT-разницу:

Часовые пояса в Laravel

Если ваше приложение будет использоваться пользователями с разными часовыми поясами, то рекомендуется использовать UTC в качестве общесистемного часового пояса, чтобы все даты и временные метки хранились в базе данных как UTC, независимо от часового пояса пользователя (тем более, что он может измениться, например, если пользователь путешествует и зашел из другой страны), а затем конвертировать временные метки в часовой пояс пользователя, чтобы он видел их правильно.

Существуют разные подходы к решению этой проблемы, в этой статье мы попытаемся охватить различные глобальные параметры, чтобы пользователь мог задать свой часовой пояс и увидеть дату и время в соответствии со своими предпочтениями.

Поле timezone в таблице пользователей

Поскольку каждый пользователь может задать свой часовой пояс, то нам нужно дополнительное поле в таблице пользователей для хранения этой информации.

Добавление Аксессора и Мутатора для часового пояса

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

В пользовательской модели зададим:

Так как мы не будем хранить в базе данных часовые пояса аналогичные дефолтному, то добавим Мутатор, который, если часовой пояс, выбранный пользователем, равен дефолтному, то он не будет сохранен в базе данных.

Хелпер Timezone

Напишем несколько хелперов, которые можно будет использовать многократно.

Существует много способов подключения хелперов, например создать app/Helpers/Helpers.php со следующей структурой:

И добавить в файл composer.json ссылку на него:

В Helpers.php добавим два новых хелпера для часовых поясов:

Этот метод создаст упорядоченную коллекцию с доступными часовыми поясами (используемыми в качестве ключа) вместе со смещением по Гринвичу, как показано на изображении ниже. Поскольку эта информация не будет меняться, то мы бессрочно закэшируем её.

Timezonedb php что это. laravel timezones dropdown. Timezonedb php что это фото. Timezonedb php что это-laravel timezones dropdown. картинка Timezonedb php что это. картинка laravel timezones dropdown

Выбор часового пояса пользователем

Используя ранее созданный хелпер, добавим форму, в которой пользователь может задавать свой часовой пояс. Например:

Получение часового пояса пользователя

Либо можно получить эту информацию и без использования внешних библиотек, но такой код может не заработать на старых браузерах:

Использование часового пояса пользователя в контроллерах и blade-шаблонах

Существуют различные варианты преобразования дат и временных меток с использованием часового пояса пользователя.

Если раздел требует, чтобы пользователь был авторизован, то мы можем использовать, например:

Или хелпер, чтобы учесть неавторизованные случаи и возвращать дефолтный часовой пояс:

Чтобы отпарсить временную метку с использованием часового пояса пользователя:

Сохранение временных меток в базе данных в формате UTC

Обычно пользователь добавляет временные метки, выбирая дату и время из javascript-библиотеки, используя свой собственный часовой пояс, поэтому мы должны преобразовать эту дату в UTC, чтобы сохранить ее в нашей базе данных.

Предположим, что пользователь может добавлять элементы и задавать их дату создания, а часовой пояс отличается от дефолтного часового пояса. Один из способов преобразования такой даты перед сохранением:

Таким образом, мы указываем парсеру, что часовой пояс данной временной метки имеет тип, и что мы преобразуем его в UTC или дефолтный часовой пояс нашего приложения.

Важно, чтобы это преобразование выполнялось после валидации, поскольку в противном случае, если проверка не удалась, то при вызове old() в шаблоне, пользователь увидит дату в формате UTC, а не в своем часовом поясе.

Пользователь имеет возможность редактировать этот элемент, поэтому сделаем, чтобы он отображался в его часовом поясе — преобразуем его перед отправкой в ​​шаблон:

Аксессоры часового пояса пользовательской модели

Если мы хотим, чтобы временные метки времени по умолчанию возвращались в часовом поясе пользователя (или дефолтном, если пользователь не залогинен или не установил свой часовой пояс), то можна задать аксессоры в модели.

Blade-компонент для дат с часовым поясом пользователя

Чтобы упростить преобразование временных меток с часовым поясом пользователя в Blade, мы можем создать отдельный компонент.

Нерекомендуемый подход

Этого делать не рекомендуется, поскольку таким образом часовой пояс всей системы изменяется для каждого пользователя и в базе данных будут сохраняться временные метки с разными часовыми поясами.

Наш Timezonedb php что это. tm. Timezonedb php что это фото. Timezonedb php что это-tm. картинка Timezonedb php что это. картинка tmТелеграм-канал — следите за новостями о Laravel.

Задать вопросы по урокам можно на нашем форуме.

Источник

Как обновить timezonedb в PHP (обновлять информацию о часовых поясах)?

phpinfo () показывает, что наша система использует «Olson» Timezone Database Version 2010.3 ». Я думаю, что это сейчас устарело, но не может найти авторитетное место, которое может подтвердить это.

(a) Могу ли я обновить информацию о часовых поясах для PHP в целом? (б) Если да, то как мне это обновить? Я видел инструкции на http://www.electrictoolbox.com/correct-php-timezone/, где говорится, что после установки соответствующего модуля он говорит, что мне нужно:

Нужно ли нам это делать? Не следует ли PHP автоматически использовать правильный файл?

насколько я знаю, временная БД (TDB) распространяется внутри самого PHP. Из-за этого временная БД становится устаревшей через некоторое время, и вы должны либо обновить PHP, либо TDB, чтобы отразить изменения в TDB.

Существует расширение PECL, которое выпускает новые пакеты TDB, которые вы можете скачать и установить и использовать в старых установках PHP.

Я не знаю, есть ли способ обновить TDB непосредственно на PHP. Расширение PECL было создано для решения этой проблемы.

Лучше просто обновить вашу версию PHP (особенно, если вы хотите обновить ее на компьютере с Windows, иначе вам придется скомпилировать расширение самостоятельно), поскольку, насколько я помню, расширение не является готовым только для Windows. Unix / linux – поэтому, если вы хотите сделать это на окнах, вам придется скомпилировать его самостоятельно, используя компилятор VC6 OR VC9).

Итак, если вы можете обновить свою версию PHP, которая будет самым быстрым решением (это было для меня по крайней мере для меня), конечно, у PHP может не быть последней информации о времени в часовом поясе, но мне пришлось решить проблему с часовым поясом db, и она была исправлена ​​в более поздняя версия PHP, которая у меня была. Если вы делаете это для unix / linux, вы также можете попробовать расширение PECL, я думаю, что для вас это может быть проще и быстрее.

Таким образом, вы фактически перезапишете старое расширение с помощью новой перекомпилированной версии и перезапустите веб-сервер; предполагая, что PHP используется в качестве модуля.

Сделать полное обновление часового пояса (у нас были проблемы с неправильным российским / московским часовым поясом):

Источник

Как обновить базу часовых поясов в php?

Смущает timelib version 2017.09, когда тут https://pecl.php.net/package/timezonedb версия 2019.3
Версия PHP 7.2.19, которая выпущена 30 мая 2019, на сколько мне известно. Почему там 2017 года база часовых поясов?
Как всё таки узнать, что именно используется и насколько актуальна база?
Есть у кого то php 7.3, как там с этим дела? Сам пока проверить не могу.

В интернете не широко распространен этот вопрос. Где есть ответы, они уже устарели и неприменимы.

Проект, для которого актуальность часовых поясов и летнего времени имеет критическое значение.

Timezonedb php что это. efe8fefec0c2411fb183b1478e95337d. Timezonedb php что это фото. Timezonedb php что это-efe8fefec0c2411fb183b1478e95337d. картинка Timezonedb php что это. картинка efe8fefec0c2411fb183b1478e95337d

почему старая версия? вопрос к ментейнерам сборки вашего пыха.

как обновить? найти вменяемую сборку или поставить расширение с пекла.

Timezonedb php что это. 6187ca141c5ae444502285. Timezonedb php что это фото. Timezonedb php что это-6187ca141c5ae444502285. картинка Timezonedb php что это. картинка 6187ca141c5ae444502285

Timezonedb php что это. 6187ca141c5ae444502285. Timezonedb php что это фото. Timezonedb php что это-6187ca141c5ae444502285. картинка Timezonedb php что это. картинка 6187ca141c5ae444502285

Я пошел по второму пути, собрал разные решения из интернета воедино.
1. В следующем шаге понадобится phpize, поэтому установим его (7.2 ваша версия php. apt-get команда Ubuntu)
apt-get install php7.2-dev
2. pecl install timezonedb
3. pecl channel-update pecl.php.net
4. pecl upgrade timezonedb
5. Тут путь может отличаться
nano /etc/php/7.2/apache2/php.ini
6. Вставить в конец extension=timezonedb.so и сохранить
7. Перезапустить сервер

В итоге, используется external база

date/time support enabled
timelib version 2017.09
«Olson» Timezone Database Version 2019.3
Timezone Database external
Default timezone UTC

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *