"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 для apache2
Райан,

2
Це вирішило це для мене, коли інших рішень не було. Я отримав цю помилку лише тоді, коли використовував функції дати на тій же сторінці, що й інтеграція з Amazon SES. Можливо, це допоможе комусь іншому.
master_gracey

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

2
Як і перший коментар про Apache, ви також повинні перезапустити IIS, щоб це набуло чинності для Windows / IIS.
jross

2
Це вирішує мою проблему! Просто інформація для неекспертів, як я, для того, щоб знайти php.iniвикористаного apache, просто виконайте наступну команду php -i | grep php.ini.
Joël Salamin

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 та перезапуск апаша не зупинило це повідомлення про помилку під час запуску сценарію за допомогою swiftmailer. Мені теж довелося додати date_default_timezone_set ("Америка / Новий Йорк"); вгорі сценарію, як пропонується. Дякую!
кайл

Я спробував ваше рішення. Тепер помилка - 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, ти поставив мене на правильний шлях. Про відношення дивіться список часових поясів для функції тут php.net/manual/en/timezones.php
Луї Лудог Троттьє,


11

@ Джустіс вказав мені на правильний напрямок, але його код не працював для мене. Це зробило:

// 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 (Орегон). Коли я закликав $s3client->listBuckets()перераховувати наявні відра в моєму php, я отримував виняток - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". я вніс зміни, щоб зробити його робочим. Поділитися цими деталями у випадку, якщо хтось стикається з подібним питанням, і жоден із наведених вище відповідей не допоможе.

  1. На підставі документації @ AWS Налаштування мережевого протоколу часу (NTP) , я підтвердив, що стан служби ntpd прекрасний, запустивши ntpstatкоманду. Якщо ви помилитесь, це посилання допоможе вам зрозуміти, що йде не так.
  2. Відкрив файл /etc/php.ini (деякі можуть мати його в інший шлях на основі встановленої версії php) і виявив, що date.timezoneне встановлено жодного значення, а також його прокоментували за замовчуванням. Я видав коментар, видаливши ";" перед цим рядком і встановіть його значення у "UTC"та збереженому файлі.
  3. Перезапущені демони http та ntp за допомогою 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

Для користувача докера: Створіть у своєму проекті локальний файл 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.