From b3f5203d85b9c206c19cf90dd9030ab66756ccc4 Mon Sep 17 00:00:00 2001 From: Krivchikov Dmitry Date: Fri, 15 Jan 2016 20:54:23 +0300 Subject: [PATCH] ADD Storage --- controllers/IndexController.php | 8 ++++++- models/Storage.php | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 models/Storage.php diff --git a/controllers/IndexController.php b/controllers/IndexController.php index 095142b..b9b7322 100644 --- a/controllers/IndexController.php +++ b/controllers/IndexController.php @@ -66,7 +66,13 @@ class IndexController extends Controller self::addVar('userLat', $_COOKIE['userLat']); self::addVar('userLng', $_COOKIE['userLng']); } else { - $loc = IpInfo::geo(isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR']); + $ip = isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR']; +// $ip = '91.204.150.217'; + $loc = Storage::get($ip); + if(!$loc) { + $loc = IpInfo::geo($ip); + Storage::model()->set($ip, $loc, 604800); // ttl = week + } self::addVar('userLat', $loc['lat']); self::addVar('userLng', $loc['lng']); } diff --git a/models/Storage.php b/models/Storage.php new file mode 100644 index 0000000..f7f81c6 --- /dev/null +++ b/models/Storage.php @@ -0,0 +1,40 @@ +_tableName_ = 'storage'; + parent::__construct($fromArray); + } + + static function model() + { + return new self(); + } + + static function get($key) + { + $val = self::model()->getAll(array('where' => '(`key` = "'. md5($key).'") AND (`ttl` >= '.time().')', 'limit' => 1)); + return $val ? unserialize($val->value) : NULL; + } + + /** + * + * @param type $key + * @param type $value + * @param int $ttl seconds + * @return boolean + */ + static function set($key, $value, $ttl = 60) + { + $value = serialize($value); + $ttl = time()+$ttl; + + $request = App::DB()->prepare("INSERT INTO `storage` SET `key`=?, `keyRaw` = ?, `value`=?, `ttl`=? ON DUPLICATE KEY UPDATE `value`=?, `ttl`=? ;"); + $res = $request->execute(array(md5($key), $key, $value, $ttl, $value, $ttl)); + + return TRUE; + } +}