Comprobar estado de un servidor mediante PHP

Quienes gestionen varias páginas en diferentes servidores, pueden necesitar hacer un pequeño test a los servidores cada poco tiempo para comprobar que están funcionando correctamente, o almenos que están funcionando, una opción es visitar las páginas, evidentemente, pero cuando el número de servidores crece no es en absoluto práctico, de manera que muchas veces resulta casi obligado buscar alternativas, o en este caso fabricarla uno mismo.

Objetivo: Script para detectar si un servidor está caído, o no.

Bien, el script consta de 3 partes, y 2 son básicas, que son la parte HTML y la parte PHP, la parte CSS podemos obviarla, pero siempre viene bien un poco de coloreado para tener una mejor visión.

Aquí se me hace bastante dificil separar los 3 códigos, por que van bastante «fusionados», de manera que pondré por un lado la función que se encargará de averiguar el estado, la lista de servidores y por último el modo de repasar cada servidor.

Parte 1/3: Función

function test($url,$tiempo){
   $check = @fsockopen($url, 80, $errno, $errstr, $tiempo);
   if($check){
      echo "<li>Online: $url</li>";
   }else{
      echo "<li>Offline: $url</li>";
   }
}

Es bastante simple ¿no? por un lado recibe $url, que será el dominio o dirección IP – por ejemplo: emm-gfx.net o 255.255.255.255 – y por otro recibe la variable $tiempo, que será el tiempo de espera hasta «darse por vencido» y pasar al siguiente servidor, si este tiempo es superado, se dará por supuesto que el servidor está offline.

Ahora estaría bien tener una lista de servidores a revisar, en un array por ejemplo, yo lo he hecho de esta manera:

Parte 2/3: Lista de servidores

$servidores = array(
   0=>'emm-gfx.net',
   1=>'emmsoftware.net',
   2=>'blacksphere.es',
   3=>'google.com',
   4=>'dominioabsurdo.lol',
   5=>'92.43.17.6',
   6=>'255.255.255.255'
);

Parte 3/3: Ejecutar la función en cada uno de los servidores

$total = count($servidores);
$inicio = 0;
while($inicio < $total){
   echo test($servidores[$inicio],$tiempo);
   $inicio++;
}

Comentarios (2)

Gracias, lo complemente para que también mandes el puerto.. no todos los servidores se revisan por el puerto 80.

Muchas gracias por tu ayuda.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.