Dateien hochladen nach „libs/Utils“
This commit is contained in:
parent
2475ac374e
commit
074411eeb5
|
@ -0,0 +1,138 @@
|
|||
<?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})";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,205 @@
|
|||
<?php
|
||||
|
||||
class Misc
|
||||
{
|
||||
/**
|
||||
* Returns human size
|
||||
*
|
||||
* @param float $filesize File size
|
||||
* @param int $precision Number of decimals
|
||||
* @return string Human size
|
||||
*/
|
||||
public static function getSize($filesize, $precision = 2)
|
||||
{
|
||||
$units = array('', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y');
|
||||
|
||||
foreach ($units as $idUnit => $unit)
|
||||
{
|
||||
if ($filesize > 1024)
|
||||
$filesize /= 1024;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
return round($filesize, $precision).' '.$units[$idUnit].'B';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns hostname
|
||||
*
|
||||
* @return string Hostname
|
||||
*/
|
||||
public static function getHostname()
|
||||
{
|
||||
return php_uname('n');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns CPU cores number
|
||||
*
|
||||
* @return int Number of cores
|
||||
*/
|
||||
public static function getCpuCoresNumber()
|
||||
{
|
||||
if (!($num_cores = shell_exec('/bin/grep -c ^processor /proc/cpuinfo')))
|
||||
{
|
||||
if (!($num_cores = trim(shell_exec('/usr/bin/nproc'))))
|
||||
{
|
||||
$num_cores = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((int)$num_cores <= 0)
|
||||
$num_cores = 1;
|
||||
|
||||
return (int)$num_cores;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns server IP
|
||||
*
|
||||
* @return string Server local IP
|
||||
*/
|
||||
public static function getLanIp()
|
||||
{
|
||||
return $_SERVER['SERVER_ADDR'];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Seconds to human readable text
|
||||
* Eg: for 36545627 seconds => 1 year, 57 days, 23 hours and 33 minutes
|
||||
*
|
||||
* @return string Text
|
||||
*/
|
||||
public static function getHumanTime($seconds)
|
||||
{
|
||||
$units = array(
|
||||
'year' => 365*86400,
|
||||
'day' => 86400,
|
||||
'hour' => 3600,
|
||||
'minute' => 60,
|
||||
// 'second' => 1,
|
||||
);
|
||||
|
||||
$parts = array();
|
||||
|
||||
foreach ($units as $name => $divisor)
|
||||
{
|
||||
$div = floor($seconds / $divisor);
|
||||
|
||||
if ($div == 0)
|
||||
continue;
|
||||
else
|
||||
if ($div == 1)
|
||||
$parts[] = $div.' '.$name;
|
||||
else
|
||||
$parts[] = $div.' '.$name.'s';
|
||||
$seconds %= $divisor;
|
||||
}
|
||||
|
||||
$last = array_pop($parts);
|
||||
|
||||
if (empty($parts))
|
||||
return $last;
|
||||
else
|
||||
return join(', ', $parts).' and '.$last;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a command that exists in the system among $cmds
|
||||
*
|
||||
* @param array $cmds List of commands
|
||||
* @param string $args List of arguments (optional)
|
||||
* @param bool $returnWithArgs If true, returns command with the arguments
|
||||
* @return string Command
|
||||
*/
|
||||
public static function whichCommand($cmds, $args = '', $returnWithArgs = true)
|
||||
{
|
||||
$return = '';
|
||||
|
||||
foreach ($cmds as $cmd)
|
||||
{
|
||||
if (trim(shell_exec($cmd.$args)) != '')
|
||||
{
|
||||
$return = $cmd;
|
||||
|
||||
if ($returnWithArgs)
|
||||
$return .= $args;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allows to pluralize a word based on a number
|
||||
* Ex : echo 'mot'.Misc::pluralize(5); ==> prints mots
|
||||
* Ex : echo 'cheva'.Misc::pluralize(5, 'ux', 'l'); ==> prints chevaux
|
||||
* Ex : echo 'cheva'.Misc::pluralize(1, 'ux', 'l'); ==> prints cheval
|
||||
*
|
||||
* @param int $nb Number
|
||||
* @param string $plural String for plural word
|
||||
* @param string $singular String for singular word
|
||||
* @return string String pluralized
|
||||
*/
|
||||
public static function pluralize($nb, $plural = 's', $singular = '')
|
||||
{
|
||||
return $nb > 1 ? $plural : $singular;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if a port is open (TCP or UPD)
|
||||
*
|
||||
* @param string $host Host to check
|
||||
* @param int $port Port number
|
||||
* @param string $protocol tcp or udp
|
||||
* @param integer $timeout Timeout
|
||||
* @return bool True if the port is open else false
|
||||
*/
|
||||
public static function scanPort($host, $port, $protocol = 'tcp', $timeout = 3)
|
||||
{
|
||||
if ($protocol == 'tcp')
|
||||
{
|
||||
$handle = @fsockopen($host, $port, $errno, $errstr, $timeout);
|
||||
|
||||
if ($handle)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
elseif ($protocol == 'udp')
|
||||
{
|
||||
$handle = @fsockopen('udp://'.$host, $port, $errno, $errstr, $timeout);
|
||||
|
||||
socket_set_timeout($handle, $timeout);
|
||||
|
||||
$write = fwrite($handle, 'x00');
|
||||
|
||||
$startTime = time();
|
||||
|
||||
$header = fread($handle, 1);
|
||||
|
||||
$endTime = time();
|
||||
|
||||
$timeDiff = $endTime - $startTime;
|
||||
|
||||
fclose($handle);
|
||||
|
||||
if ($timeDiff >= $timeout)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue