NIWPI/Info/uinfo.class.php

447 lines
7.5 KiB
PHP

<?php
/**
* A uInfo class
*
* This class getting information about your IP, browser and OS.
*
* @author Sergei Marochkin <me@ziggi.org>
* @version 2.3
* @copyright 2012-2016 Sergei Marochkin
* @license The MIT License
*/
class uInfo {
/**
* A private variable
*
* @var string contains HTTP_USER_AGENT for the class
*/
private $_userAgent;
/**
* A private variable
*
* @var string contains ip address
*/
private $_ip;
/**
* A private variable
*
* @var object contains ip information
*/
private $_ipInfo;
/**
* A private variable
*
* @var string contains configuration for browsers
*/
private $_browser = array(
"Edge" => array(
"name" => "Microsoft Edge",
"version" => 1,
),
"Midori" => array(
"name" => "Midori",
"version" => 1,
),
"SputnikBrowser" => array(
"name" => "Sputnik Browser",
"version" => 1,
),
"Vivaldi" => array(
"name" => "Vivaldi",
"version" => 1,
),
"Breach" => array(
"name" => "Breach",
"version" => 0,
),
"Steam" => array(
"name" => "Steam Browser",
"version" => 0,
),
"EVE-IGB" => array(
"name" => "EVE Browser",
"version" => 0,
),
"Konqueror" => array(
"name" => "Konqueror",
"version" => 1,
),
// opera on blink
"OPR" => array(
"name" => "Opera",
"version" => 1,
),
"Coast" => array(
"name" => "Opera Coast",
"version" => 1,
),
"YaBrowser" => array(
"name" => "Yandex.Browser",
"version" => 1,
),
"UCBrowser" => array(
"name" => "UC Browser",
"version" => 1,
),
"CriOS" => array(
"name" => "Google Chrome",
"version" => 1,
),
"Chrome" => array(
"name" => "Google Chrome",
"version" => 1,
),
"MSIE" => array(
"name" => "Internet Explorer",
"version" => 1,
),
"Trident" => array(
"name" => "Internet Explorer",
"version" => 4,
),
"Firefox" => array(
"name" => "Mozilla Firefox",
"version" => 1,
),
"Safari" => array(
"name" => "Safari",
"version" => 1,
),
// Opera Mini
"Mini" => array(
"name" => "Opera Mini",
"version" => -1,
),
"Opera" => array(
"name" => "Opera",
"version" => -1,
),
);
/**
* A private variable
*
* @var string contains configuration for operating systems
*/
private $_os = array(
"Linux" => array(
"name" => "GNU/Linux",
"version" => null,
),
"Ubuntu" => array(
"name" => "Ubuntu",
"version" => null,
),
"Mac_PowerPC" => array(
"name" => "Mac OS 9",
"version" => null,
),
"OS X" => array(
"name" => "OS X",
"version" => null,
),
"Windows 95" => array(
"name" => "Windows",
"version" => "95",
),
"Windows 98" => array(
"name" => "Windows",
"version" => "98",
),
"Windows NT 5.0" => array(
"name" => "Windows",
"version" => "2000",
),
"Windows NT 5.1" => array(
"name" => "Windows",
"version" => "XP",
),
"Windows NT 5.2" => array(
"name" => "Windows",
"version" => "Server 2003",
),
"Windows NT 6.0" => array(
"name" => "Windows",
"version" => "Vista",
),
"Windows NT 6.1" => array(
"name" => "Windows",
"version" => "7",
),
"Windows NT 6.2" => array(
"name" => "Windows",
"version" => "8",
),
"Windows NT 10.0" => array(
"name" => "Windows",
"version" => "10",
),
"Android" => array(
"name" => "Android",
"version" => null,
),
"BlackBerry" => array(
"name" => "BlackBerry",
"version" => null,
),
"iPod OS" => array(
"name" => "iOS(iPod)",
"version" => null,
),
"CPU OS" => array(
"name" => "iOS(iPad)",
"version" => null,
),
"iPhone OS" => array(
"name" => "iOS(iPhone)",
"version" => null,
),
"SymbOS" => array(
"name" => "Symbian",
"version" => null,
),
"Windows Phone OS" => array(
"name" => "Windows Phone",
"version" => null,
),
);
/**
* Sets $user_agent to a new HTTP_USER_AGENT value
*
* @param string $http_user_agent a HTTP_USER_AGENT
* @param string $ip_address a ip address
* @return void
*/
function __construct($http_user_agent, $ip_address = null)
{
$this->_userAgent = $http_user_agent;
$this->_ip = $ip_address;
if (!is_null($this->_ip)) {
$this->_ipInfo = json_decode(@file_get_contents("https://ipinfo.io/" . $this->_ip . "/json"));
}
}
/**
* Provides access to data with a view $user->host->ip
*
* @param string $param received
* @return string result or pointer object
*/
function __get($param)
{
if (isset($this->_pointer)) {
$result = null;
switch ($this->_pointer) {
case "host":
$result = $this->get_host($param);
break;
case "browser":
$result = $this->get_browser($param);
break;
case "os":
$result = $this->get_os($param);
break;
}
$this->_pointer = null;
return $result;
} else {
$this->_pointer = $param;
return $this;
}
}
/**
* Getting host information
*
* @param string $param type of information about the host
* @return string your ip, hostname or other information
*/
public function get_host($param)
{
$result = null;
switch ($param) {
case "ip":
$result = $this->_ip;
break;
case "name":
if (!is_null($this->_ip)) {
$result = gethostbyaddr($this->_ip);
}
break;
case "city":
if (isset($this->_ipInfo->city)) {
$result = $this->_ipInfo->city;
}
break;
case "region":
if (isset($this->_ipInfo->region)) {
$result = $this->_ipInfo->region;
}
break;
case "country":
if (isset($this->_ipInfo->country)) {
$result = $this->_ipInfo->country;
}
break;
case "loc":
if (isset($this->_ipInfo->loc)) {
$result = $this->_ipInfo->loc;
}
break;
case "org":
if (isset($this->_ipInfo->org)) {
$result = $this->_ipInfo->org;
}
break;
}
return $result;
}
/**
* Getting browser information
*
* @param string $param type of information about the browser
* @return string your browser name or version
*/
public function get_browser($param)
{
$result = null;
switch ($param) {
case "name":
foreach ($this->_browser as $key => $value) {
if (preg_match("/".$key."/", $this->_userAgent)) {
$result = $value['name'];
break;
}
}
break;
case "version":
$pos = null;
$array = preg_split("/[\/ ;:()]/", $this->_userAgent);
foreach ($this->_browser as $key => $value) {
if (($pos = array_search($key, $array)) !== false) {
if ($value['version'] < 0) {
$result = end($array);
} else if ($value['version'] > 0) {
$result = $array[ $pos + $value['version'] ];
}
break;
}
}
break;
}
return $result;
}
/**
* Getting operating system information
*
* @param string $param type of information about the OS
* @return string your OS name or version
*/
public function get_os($param)
{
$result = null;
switch ($param) {
case "name":
foreach ($this->_os as $key => $value) {
if (preg_match("/".$key."/", $this->_userAgent)) {
$result = $value['name'];
}
}
break;
case "version":
foreach ($this->_os as $key => $value) {
if (preg_match("/".$key."/", $this->_userAgent)) {
if ($value['version'] === null) {
$result = preg_replace("/.*".$key." ([0-9._]+)[\;\ \)].*/", "$1", $this->_userAgent);
if ($result == $this->_userAgent) {
$result = null;
} else {
$result = str_replace("_", ".", $result);
}
} else {
$result = $value['version'];
}
}
}
break;
}
return $result;
}
}