$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.' 2>/dev/null '.$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 false; } else { fclose($handle); return true; } } elseif ($protocol == 'udp') { $handle = @fsockopen('udp://'.$host, $port, $errno, $errstr, $timeout); socket_set_timeout($handle, $timeout); $write = fwrite($handle, 'x00'); if ($write === false) { return false; } else { $startTime = time(); $header = fread($handle, 1); $endTime = time(); $timeDiff = $endTime - $startTime; fclose($handle); if ($timeDiff >= $timeout) return true; else return false; } } return false; } }