138 lines
3.6 KiB
PHP
138 lines
3.6 KiB
PHP
|
<?php
|
||
|
|
||
|
class Config
|
||
|
{
|
||
|
public $file = null;
|
||
|
public $config = null;
|
||
|
|
||
|
public function __construct()
|
||
|
{
|
||
|
$this->_checkPHPVersion(5.3);
|
||
|
|
||
|
$this->file = __DIR__.'/../../conf/esm.config.json';
|
||
|
|
||
|
if (!file_exists($this->file))
|
||
|
throw new \Exception('Config file '.basename($this->file).' not found');
|
||
|
|
||
|
$this->_readFile();
|
||
|
}
|
||
|
|
||
|
private function _readFile()
|
||
|
{
|
||
|
$content = file_get_contents($this->file);
|
||
|
$this->config = json_decode(utf8_encode($content), true);
|
||
|
|
||
|
if ($this->config == null && json_last_error() != JSON_ERROR_NONE)
|
||
|
{
|
||
|
throw new \LogicException(sprintf("Failed to parse config file '%s'. Error: '%s'", basename($this->file) , json_last_error_msg()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns a specific config variable
|
||
|
* Ex : get('ping:hosts')
|
||
|
*/
|
||
|
public function get($var)
|
||
|
{
|
||
|
$tab = $this->config;
|
||
|
|
||
|
$explode = explode(':', $var);
|
||
|
|
||
|
foreach ($explode as $vartmp)
|
||
|
{
|
||
|
if (isset($tab[$vartmp]))
|
||
|
{
|
||
|
$tab = $tab[$vartmp];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// return $tab == $this->config ? null : $tab;
|
||
|
return $tab;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns all config variables
|
||
|
*/
|
||
|
public function getAll()
|
||
|
{
|
||
|
return $this->config;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Checks the PHP version compared to the required version
|
||
|
*/
|
||
|
private function _checkPHPVersion($min)
|
||
|
{
|
||
|
if (!version_compare(phpversion(), $min, '>='))
|
||
|
throw new \Exception('Your PHP version is too old ! PHP '.$min.' is required.');
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Checks if there is an eSM`Web update available
|
||
|
*/
|
||
|
public function checkUpdate()
|
||
|
{
|
||
|
if ($this->get('esm:check_updates') === false)
|
||
|
return null;
|
||
|
|
||
|
$response = null;
|
||
|
$this_version = $this->get('esm:version');
|
||
|
$update_url = $this->get('esm:website').'/esm-web/update/'.$this_version;
|
||
|
|
||
|
if (!function_exists('curl_version'))
|
||
|
{
|
||
|
$tmp = @file_get_contents($update_url);
|
||
|
$response = json_decode($tmp, true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$curl = curl_init();
|
||
|
|
||
|
curl_setopt_array($curl, array(
|
||
|
CURLOPT_CONNECTTIMEOUT => 10,
|
||
|
CURLOPT_RETURNTRANSFER => true,
|
||
|
CURLOPT_SSL_VERIFYPEER => false,
|
||
|
CURLOPT_TIMEOUT => 60,
|
||
|
CURLOPT_USERAGENT => 'M_Viper Server Monitor',
|
||
|
CURLOPT_URL => $update_url,
|
||
|
));
|
||
|
|
||
|
$response = json_decode(curl_exec($curl), true);
|
||
|
|
||
|
curl_close($curl);
|
||
|
}
|
||
|
|
||
|
if (!is_null($response) && !empty($response))
|
||
|
{
|
||
|
if (is_null($response['error']))
|
||
|
{
|
||
|
return $response['datas'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// PHP 5.5.0
|
||
|
if (!function_exists('json_last_error_msg'))
|
||
|
{
|
||
|
function json_last_error_msg()
|
||
|
{
|
||
|
static $errors = array(
|
||
|
JSON_ERROR_NONE => null,
|
||
|
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
|
||
|
JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch',
|
||
|
JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
|
||
|
JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
|
||
|
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded'
|
||
|
);
|
||
|
$error = json_last_error();
|
||
|
return array_key_exists($error, $errors) ? $errors[$error] : "Unknown error ({$error})";
|
||
|
}
|
||
|
}
|