En ocasiones, sobre todo en nuestros paneles de administración, a veces es necesario, o bonito, conocer cuánto tiempo lleva el servidor encendido, así vemos si nos han reseteado la máquina o incluso alardear de que nuestro servidor lleva encendido más tiempo que otro.
Para ello, yo uso este código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /** ****************************************************************** * @brief Obtiene un array con la información del uptime * * @return array('days'=> , 'hours'=> , 'minutes'=> , 'seconds'=> * o falso si no se puede leer /proc/uptime * ******************************************************************/ function getUptime() { $info = @file_get_contents("/proc/uptime"); if (!$info) return false; $desglos = explode(" ", $info); $segundos = intval($desglos[0] % 60); $minutos = intval($desglos[0] / 60 % 60); $horas = intval($desglos[0] / 3600 % 24); $dias = intval($desglos[0] / 86400); return array('days' => $dias, 'hours' => $horas, 'minutes' => $minutos, 'seconds' => $segundos); } |
Donde obtenemos en un array los días, horas, minutos y segundos, directamente podemos hacer:
1 |
Si quieremos una salida bonita, podemos hacer lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /** ****************************************************************** * @brief Expresa un número con su unidad. Si el número es 1, pone la unidad en singular, si es >1, lo pone el plural * * @param $numero Número a presentar * @param $singular Unidad en singular * @param $plural Unidad en plural * @param $coma Texto a presentar delante de la cantidad (por ejemplo, una coma) * @param $sicero Texto a presentar si el número es cero * @param $desp Texto a presentar después de la cantidad * * @return Texto formateado * ******************************************************************/ function cuenta($numero, $singular, $plural, $coma=false, $sicero=false, $desp=false) { if ($numero>1) $out=$numero.$plural; elseif ($numero==1) $out=$numero.$singular; else $out=$sicero; if ($out) $out=$coma.$out.$desp; return $out; } function returnUptime() { $o=''; $uptime=getUptime(); if (!$uptime) throw new Exception ("No se puede acceder a /proc/uptime"); if ($uptime['days']) $o.=cuenta($uptime['days'],' día', ' días', ($o!='')?', ':'', '', ''); if ($uptime['hours']) $o.=cuenta($uptime['hours'],' hora', ' horas', ($o!='')?', ':'', '', ''); if ($uptime['minutes']) $o.=cuenta($uptime['minutes'],' minuto', ' minutos', ($o!='')?', ':'', '', ''); if ($uptime['seconds']) $o.=cuenta($uptime['seconds'],' segundo', ' segundos', ($o!='')?', ':'', '', ''); return $o; } echo returnUptime(); |
cuenta() es una función que hice hace mucho mucho tiempo y a la que le tengo mucho cariño, y me ayuda a hacer la salida más amigable para el usuario. Aunque tenéis el comentario para Doxygen encima, aquí relato sus argumentos:
- $numero : Es el número que vamos a mostrar por pantalla, puede ser cualquier número
- $singular : Muestra la unidad en la que está expresado el número, además, este texto se mostrará sólo si el número es 1.
- $plural : Es igual que el anterior, pero se mostrará cuando la unidad es distinto a 1.
- $coma : Es un texto que se representa antes de la unidad, por ejemplo una coma, si vamos a enumerar, como en este ejemplo del uptime
- $sicero : Este texto se mostrará si $numero es 0
- $desp : Será un texto que se muestre después de la cadena generada
La función getUptime() producirá una excepción en servidores Windows o, en sistemas donde no tengamos acceso a /proc/uptime ; por supuesto el cliente puede estar corriendo cualquier sistema operativo.
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /