]> git.joonet.de Git - adminer.git/commit
Editor: Don't set time zone from PHP
authorLukas Tribus <luky-37@hotmail.com>
Sat, 9 Sep 2017 09:44:42 +0000 (11:44 +0200)
committerJakub Vrána <jakub@vrana.cz>
Sat, 9 Sep 2017 09:44:42 +0000 (11:44 +0200)
commit32f1e856ad1de5c4b7fa3fb63238eb5a9aacef10
tree8660be7669bef862a5a73d4fe30a5587d02535ff
parent17e45e9a9c7e4a2a753ce7cb527cf2b592ae67bd
Editor: Don't set time zone from PHP

Current implementation checks the delta between the local time and
UTC, and applies the delta as time zone for MySQL.

This assumption is wrong if the current time is DST enabled, but the
time that is converted isn't - and vice versa.

For example, Europe/Prague is "CET-1CEST,M3.5.0,M10.5.0/3", when
the MySQL connections is setup now (September, DST enabled) and
we are reading a TIMESTAMP from November, then MySQL applies +0200
instead of +0100 to that timestamp even though November is supposed
to be DST disabled.

There is no reliable and portable way in PHP to understand the
time zone, especially since PHP >= 5.4.0 ignores environment
variable and OS settings [1].

MySQL needs to be properly setup (TZ data loaded [2] and default
TZ set [3]), then everything will work just fine.

The current implementation however causes wrong data 50% of the
time, even when OS/MySQL/PHP is properly setup. As a MySQL
connection will converte timestamps from both DST enabled and
DST disabled dates, a static UTC offset must never be set at
connection level (set time_zone = ...).

This change removes the current implementation, therefor maintaining
OS/MySQL defaults, fixing the DST issue in properly configured
environments.

[1] http://php.net/manual/en/function.date-default-timezone-get.php
[2] https://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html
[3] https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html
changes.txt
editor/include/adminer.inc.php