From 769f1effb09210a8e3c4a9ae83a1dd9b9c9724d4 Mon Sep 17 00:00:00 2001 From: Michael Yoo Date: Sun, 5 Oct 2014 01:05:00 +0930 Subject: [PATCH] Cleaner timezone parsing for Linux and add support for Macs --- src/pocketmine/PocketMine.php | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 8ce8df20e..e897a5c9f 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -214,16 +214,38 @@ namespace pocketmine { } break; case 'linux': - exec("date +%s", $buffer); - $offset = round((intval(trim($buffer[0])) - time()) / 60) * 60; + // Ubuntu / Debian. + if(file_exists('/etc/timezone')){ + $data = file_get_contents('/etc/timezone'); + if($data){ + return $data; + } + } - $daylight = (integer) date("I"); - $timezone = timezone_name_from_abbr("", $offset, $daylight); + // RHEL / CentOS + if(file_exists('/etc/sysconfig/clock')){ + $data = parse_ini_file('/etc/sysconfig/clock'); + if(!empty($data['ZONE'])){ + return $data['ZONE']; + } + } - return $timezone; + return false; + break; + case 'mac': + if(is_link('/etc/localtime')){ + $filename = readlink('/etc/localtime'); + if (strpos($filename, '/usr/share/zoneinfo/') === 0){ + $timezone = substr($filename, 20); + return $timezone; + } + } + + return false; break; default: return false; + break; } return false;