В чем причина того, что «небезопасно полагаться на настройки часового пояса системы»?

#php #datetime

#php #дата и время

Вопрос:

В python я могу сделать

 import datetime
print datetime.datetime.now().strftime('%Y-%m-%d')
# prints `2014-06-27`. 
 

Аналогично, в node.js:

 console.log(new Date().toDateString());
// Fri Jun 27 2014
 

Когда я пытаюсь сделать то же самое в php:

 <?php
print date('Y-m-d');
?>
 

Я начинаю понимать это

Предупреждение: date(): небезопасно полагаться на настройки часового пояса системы. Вам необходимо использовать параметр date.timezone или функцию date_default_timezone_set() . Если вы использовали какой-либо из этих методов и все еще получаете это предупреждение, скорее всего, вы неправильно указали идентификатор часового пояса. На данный момент мы выбрали часовой пояс «UTC», но, пожалуйста, установите date.timezone, чтобы выбрать свой часовой пояс. in ….

В чем смысл этого сообщения? Почему python или node не беспокоят? Что именно «небезопасно» в использовании системного часового пояса?

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

Комментарии:

1. Если у вас есть машина времени, вы могли бы вернуться в 2006 год и спросить Дерика . Это единственный способ быть уверенным.

Ответ №1:

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

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

Здесь есть некоторое обсуждение этого, в котором упоминается обоснование, которое я привел выше. Еще одно обоснование с той же страницы, от кого-то, кто предположительно является разработчиком языка PHP.

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

Комментарии:

1. 1 Я думаю, PHP нужно сделать более «безопасным для новичков», чем другие языки. Не то чтобы у вас не было таких же проблем на других языках, просто разработчики PHP, вероятно, больше не обращают на это внимания…

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

3. @thg435, предположим, вы разрешаете по умолчанию использовать системное местное время для каждого запроса. В этом случае любой пользователь вашего веб-сервиса будет видеть местное время вашей системы, что, вероятно, не является вашим намерением.

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

5. @merlin2011: хорошо, предположим, я выбираю маршрут (a) и перенастраиваю tz моего сервера. Обычно я бы использовал инструменты ОС, подобные /etc/localtime общесистемным. Почему php считает, что полагаться на это «небезопасно»? Должна быть причина!

Ответ №2:

После прочтения этой темы

http://grokbase.com/t/php/php-internals/135qbh5twa/date-timezone-e-warning-really-necessary-whats-the-rationale

Я понимаю, что для этого предупреждения нет никаких веских технических причин. Единственная причина заключается в том, что кто-то из группы php подумал, что было бы полезно уменьшить количество сообщений об ошибках на bugs.php.net . Итак, в основном magic_quotes , что-то вроде.

Комментарии:

1. Я рад, что вы в конце концов нашли объяснение, которое вас удовлетворило. Мне жаль, что я не смог заставить свой ответ сработать для вас.