«Date (): небезопасно полагаться на настройки часового пояса системы…»

354

Я получил эту ошибку, когда я попросил обновить версию PHP с 5.2.17 до PHP 5.3.21 на сервере.

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 86</p>

</div>
Warning: date(): It is not safe to rely on the system timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Warning: date(): It is not safe to rely on the system timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 99
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 99</p>

</div>
Теги:
timezone

22 ответа

558
Лучший ответ

Вероятно, вам нужно установить часовой пояс в строке конфигурации в вашем файле php.ini. У вас должен быть такой блок в файле php.ini:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/New_York

Если нет, добавьте его (заменив часовой пояс на ваш). После настройки обязательно перезапустите httpd (service httpd restart).

Вот список поддерживаемых часовых поясов .

  • 12
    чтобы быть понятным, после внесения этого изменения, обязательно sudo service apache2 restart
  • 7
    apachectl graceful достаточно apachectl graceful (по крайней мере, у меня работает).
Показать ещё 15 комментариев
180

Если вы не можете изменить конфигурацию php.ini, вы можете использовать следующий фрагмент кода в начале вашего кода:

date_default_timezone_set('Africa/Lagos');//or change to whatever timezone you want

Список часовых поясов можно найти на http://www.php.net/manual/en/timezones.php.

  • 7
    По какой-то причине установка date.timezone = America / New_York в моем php.ini и перезапуск apache не остановили это сообщение об ошибке при запуске скрипта с использованием swiftmailer. Мне также пришлось добавить date_default_timezone_set ('America / New_York'); в верхней части сценария, как предлагается. Спасибо!
  • 0
    Также не работает набор в php.ini (nginx)
Показать ещё 3 комментария
69

Добавьте в свой файл index.php следующее. Я впервые столкнулся с этим, когда переместил приложение с моего XAMPP сервера на Apache 2.2 и PHP 5.4...

Я бы посоветовал вам сделать это в вашем файле index.php вместо файла php.ini.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
  • 3
    отличное решение для случаев, когда вам не обязательно иметь полный доступ к системе, думаю, это для людей с ограниченным доступом или вам нужно более надежное решение, и объедините это с редактированием php.ini, если вы можете
  • 0
    лучшее решение
15
<? print(gmdate("Y")); ?> 

вместо

<? print(date("Y")); ?>

работал у меня (показывает текущий год и больше не показывает сообщение об ошибке). (Спасибо Крису выше)

  • 0
    Это сработало для меня
14

Если вы используете CodeIgniter и не можете изменить php.ini, я добавил следующее в начало index.php:

date_default_timezone_set('GMT');
  • 0
    Это работает для меня, спасибо Хосе за вашу помощь. С наилучшими пожеланиями, Сарим Гани i-splendid.com
  • 0
    Это работает на нативном php php.net/manual/en/function.date-default-timezone-set.php . TY, вы поставили меня на правильный путь. В связи с этим смотрите список часовых поясов для функции здесь php.net/manual/en/timezones.php
Показать ещё 2 комментария
14

Если это не ваши варианты

  • Изменение php.ini.
  • Добавление вызова date_default_timezone.

Вместо date вы можете использовать gmdate.

Я использовал gmdate( "Y" ), когда мне понадобился год для авторского snipplet.

11

Я всегда держу эту строку внутри root rootign index.php. Так что мой код работает на любом сервере

date_default_timezone_set('Asia/Dhaka');

Список поддерживаемых часовых поясов здесь

10

@Юстис указал мне в правильном направлении, но его код не работал у меня. Это произошло:

// set the default timezone if not set at php.ini
if (!date_default_timezone_get('date.timezone')) {
    // insert here the default timezone
    date_default_timezone_set('America/New_York');
}

Документация: http://www.php.net/manual/en/function.date-default-timezone-get.php

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

4

Эта проблема прослушивала меня в течение некоторого времени, когда я пыталась внедрить "createbucket.php" script в композитор, и мне постоянно говорят, что моя часовая зона неверна.

В итоге единственное, что зафиксировало проблему, заключалось в следующем: $ sudo nano /etc/php.ini

Поиск часового пояса

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = UTC

Убедитесь, что вы удалите ;

Тогда, наконец,

$ sudo service httpd restart

И вам будет хорошо:)

4

Я должен был поместить это в двойные кавычки.

date_default_timezone_set("America/Los_Angeles"); // default time zone
  • 0
    До сих пор не работает (в Mac OSX), поэтому я в итоге сломался и добавил /etc/php.ini: date.timezone = America/Los_Angeles
1

Вы можете установить часовой пояс в вашем файле .htaccess

php_value date.timezone UTC
1

Простой метод для двух часовых поясов.

<?php 
$date = new DateTime("2012-07-05 16:43:21", new DateTimeZone('Europe/Paris')); 

date_default_timezone_set('America/New_York'); 

echo date("Y-m-d h:iA", $date->format('U')); 

// 2012-07-05 10:43AM 
?>
1

В дополнение к установке date.timezone = как упоминалось в нескольких ответах, Я обнаружил ошибку в файле php.ini, которая не позволяла ему добраться до date.timezone. То, как я нашел это, - это запустить php из командной строки в терминале. это привело к тому, что сообщение об ошибке было сообщено на линии 114. В моем случае я раскомментировал параметр для отображения ошибок, которые имели '|' между 2 значениями. Ему это не понравилось. Я удалил одно из значений и | и после этого все было хорошо.

0
    date_default_timezone_set(date_default_timezone_get());

Это простое решение для тех, кто не знает часовой пояс.

0

Для пользователя Docker: создайте локальный файл timezone.ini в своем проекте, настройте конфигурацию в docker-compose.yml,

    volumes:
        - "./docker/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini"

timezone.ini

    date.timezone=Australia/Sydney
0

Этот ответ выше от CtrlX является правильным ответом, но он может не работать полностью. Я добавил эту строку в файл php.ini:

date.timezone = "America/Los_Angeles"

но он не удалял ошибку PHP для всех моих файлов, потому что некоторые из моих PHP-скриптов находятся в подпапках. Поэтому мне пришлось отредактировать файл .htaccess, чтобы настроить php.ini для использования рекурсивно (в подпапках):

suphp_configpath /home/account_name/public_html

где account_name - ваше имя учетной записи cpanel, а public_html - это папка, в которой находится ваш файл php.ini.

0

В моем конкретном случае у меня PHP настроен на использование PHP-FPM (FastCGI Process Manager). При выполнении phpinfo() из CLI я видел правильный часовой пояс, который я установил в php.ini, однако он все еще был некорректным в браузере и вызывал сбой моего кода. Мне просто нужно перезапустить службу php-fpm на сервере.

service rh-php56-php-fpm restart

Вам также может потребоваться перезапустить службу httpd, если вы отредактировали php.ini

service httpd restart
0

У меня была ошибка с php-fpm в chroot-тюрьме. Я попытался создать etc/php.ini и /usr/share/zoneinfo в каталоге chroot, но это просто не сработало. Я даже попробовал рассказать демонам php-fpm, чтобы увидеть, какой файл они пропали без вести. Ничего не вышло.

Итак, в случае, если Google приведет вас сюда, потому что вы получите эту ошибку при использовании php-fpm, настроенной для chroot, вы можете исправить ее, добавив эту строку в /etc/php-fpm.d/www.conf в разделе ENV:

env[TZ] = America/New_York

Обычно для его вступления в силу требуется перезапуск php-fpm. Надеюсь, это поможет кому-то там.

0

Если вы используете Plesk, попробуйте, сначала, откройте PHP Settings, внизу страницы, измените date.timezone с DEFAULT на UTC.

Изображение 762

Изображение 763

0

Я размещаю свои ведра EC2 и S3 в регионе us-west-2 (Oregon). Когда я звонил $s3client->listBuckets(), чтобы перечислить существующие ковши в моем php, я получал исключение - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system timezone settings...". Я сделал следующие изменения, чтобы заставить его работать. Разделяя эти данные, если кто-то сталкивается с подобной проблемой, и любой из вышеперечисленных ответов не помог.

  • На основе документации @AWS "Настройка протокола сетевого времени" (NTP) я подтвердил, что статус службы ntpd прекрасен, запустив команду ntpstat. Если вы получите ошибку, эта ссылка поможет вам узнать, что происходит не так.
  • Открыт файл /etc/php.ini(некоторые могут иметь его в другом пути на основе установленной версии php) и обнаружили, что date.timezone не было установлено ни в какое значение, а также было отмечено по умолчанию. Я не комментировал, удалив ';' перед этой строкой и установите его значение "UTC" и сохраните файл.
  • Перезагруженные демоны http и ntp с помощью команд sudo service httpd restart и sudo service ntpd restart.

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

0

Быстрое решение, в то время как вы исправляете несовместимости, заключается в отключении отчетов об ошибках в вашем файле index.php:

Вставьте строку ниже в index.php ниже define( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );
-2
<? date_default_timezone_set('Europe/Istanbul'); ?>

Для php (или вашего местоположения).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню