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


359

Я получил эту ошибку, когда запросил обновить версию 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's 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's 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's 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's 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>

Ответы:


556

Вероятно, вам нужно поместить часовой пояс в строку конфигурации в вашем 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
Ryan

2
Это решило это для меня, когда другие решения не сделали. Я получил эту ошибку, только когда использовал функции даты на той же странице, что и интеграция с Amazon SES. Может быть, это поможет кому-то еще.
master_gracey

9
Если вы используете PHP CLI (php -r или php -a) в своем клиентском терминале, вам нужно отредактировать файл CLI php.ini, а не apache2. Файл php.ini CLI от YourC обычно можно найти по адресу /etc/php5/cli/php.ini
justinpage

2
Как и в первом комментарии об Apache, необходимо также перезапустить IIS, чтобы это вступило в силу в Windows / IIS.
Джросс

2
Это решит мою проблему! Просто информация для таких неэкспертов, как я, чтобы найти php.iniиспользуемый apache, просто выполните следующую команду php -i | grep php.ini.
Жоэль Саламин

198

Если вы не можете изменить конфигурацию 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'); в верхней части сценария, как предлагается. Спасибо!
Кайл

Я попробовал ваше решение. Теперь ошибка 500 внутренняя ошибка сервера. Я использую apache 2.x и codeigniter.
Хафиз Шехбаз Али

@ShehbazAli Вы, должно быть, сделали что-то не так. В каком из ваших сценариев вы добавили фрагмент?
Бабатунде Адейеми

тот же код работает на производстве. Там нет ошибки. Я установил apache, php и MySQL вручную в окне 10. PHP, MySQL и Apache работают. Но этот проект дает ошибку.
Хафиз Шехбаз Али

72

Добавьте следующее в ваш 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, если можете
aqm

18
<? print(gmdate("Y")); ?> 

вместо

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

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


15

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

  • Модификация php.ini.
  • Добавление date_default_timezoneзвонка.

Вместо того, чтобы dateвы могли использовать gmdate.

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


14

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

date_default_timezone_set('GMT');

Это работает для меня, спасибо Хосе за вашу помощь. С наилучшими пожеланиями, Сарим Гани i-splendid.com
Сарим Шехани

Это работает на нативном php php.net/manual/en/function.date-default-timezone-set.php . TY, вы поставили меня на правильный путь. В связи с этим см. Список часовых поясов
Луи Лоудог Троттье,


11

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

// 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

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


5

Эта проблема беспокоила меня в течение НЕКОТОРОГО времени, так как я пытаюсь внедрить скрипт «createbucket.php» в композитор, и мне постоянно говорят, что мой часовой пояс неверен.

В конце концов, единственное, что решило проблему, это: $ 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

И тебе будет хорошо идти :)


5

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

date_default_timezone_set("America/Los_Angeles"); // default time zone

До сих пор не работает (в Mac OSX), поэтому я в итоге сломался и добавил/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu

3

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

php_value date.timezone UTC

Это должно работать в том случае, если php.ini по-прежнему возвращает предупреждение, несмотря на его установку (php 5.4. *). Работал на меня.
Кристиан Бонато,

2

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


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 
?>


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 );

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's timezone settings...". я сделал ниже изменения, чтобы это работало. Разделение этих деталей в случае, если кто-то сталкивается с подобной проблемой, и любой из вышеупомянутых ответов не помог.

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

После этого я могу без проблем перечислять корзины. Надеюсь это поможет.


0

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

введите описание изображения здесь

введите описание изображения здесь


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

В моем конкретном случае у меня есть 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

Этот ответ выше от 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

Для пользователя 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

Если у вас нет доступа к файлу php.ini, создайте или отредактируйте .htaccessфайл в корне своего домена или подпрограммы и добавьте его (сгенерированный cpanel):

<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>

<IfModule php5_module>
php_value date.timezone "America/New_York"
</IfModule>

<IfModule lsapi_module>
php_value date.timezone "America/New_York"
</IfModule>

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

0

Есть два варианта решения этого

Сначала перейдите в файл php.ini и установите часовой пояс по умолчанию.

date.timezone = "America/New_York"

После того, как вы установили часовой пояс в php.ini, перезапустите сервер.

Во-вторых, измените часовой пояс назначить часовой пояс в зависимости от ваших потребностей

date_default_timezone_set('America/New_York');

-1

На вашей странице подключения введите такой код в date_default_timezone_set("Africa/Johannesburg");зависимости от вашего текущего местоположения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.