Publi

Conocer uptime del servidor con PHP

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
print_r(getUptime());

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.

También podría interesarte...

There are 2 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Pingback: BlogESfera.com /

Leave a Reply