viernes, julio 20, 2007

Verificar estado de una web con PHP

Para los desarrolladores web es importante saber que las webs que han montado permanecen activas. Una forma de probarlo sería conectarse periódicamente con el navegador, pero evidentemente no es una solución muy cómoda.

A continuación os ofrezco un script en php que permite hacer eso mismo: introducir una lista de direcciones web a testear y el script comprobará si están activas, en caso contrario nos enviará un correo indicando qué web ha fallado. Combinándolo con CRON podemos hacer que la tarea se ejecute periódicamente y así podremos saber si en algún momento la página deja de estar activa.

En mi caso además he incluido un filtro en mi cliente de correo, así puedo ver un "informe" de cuando suele fallar cada web, así detecté que el servidor de mi trabajo solía fallar siempre en el mismo intervalo de la tarde y pude solucionarlo.

Este es el código php, incluye las instrucciones para hacerlo funcionar.

/********************************************************/
/*
ER CHIVATO

Version: 0.1
Licencia: GPL (http://es.tldp.org/Otros/gples/gples.html)
Autor: Gonzalo Cao Cabeza de Vaca
Mailto: gonzalo(punto)cao@gmail(punto)com
Descripcion: ER CHIVATO es un script en php que monitoriza
el estado de las webs indicadas en la configuración

Instalación:

- Como página web:
- para acceder en cualquier momento copiar el archivo en una
carpeta accesible desde el servidor web
- el servidor web debe ser capaz de ejecutar código PHP
(lógico ¿no?)

- Como servicio:
- es indiferente donde esté copiado el archivo
- debe estar instalado el intérprete de php (generalmente
en /bin/php) puedes probar a lanzar el script a mano:

$php er-chivato.php

- Para que funcione correctamente el modo depuración debe
estar desactivado ($debug=0). Sino no obtendremos ningún
mensaje.

- configuramos el crontab para que el script se ejecute
periodicamente:

$crontab -e

Al abrirse la aplicación añadimos la entrada para que
se ejecute por ejemplo cada 10 minutos:

(asterisco)/10 * * * * /bin/php /home/gonzalo/bin/er-chivato.php >> /home/gonzalo/logs/er-chivato.log

OJO: SUSTITUIR (asterisco) POR *
LO HE TENIDO QUE PONER PARA QUE NO ME CERRARA EL COMENTARIO DE PHP

- En cualquier caso el archivo php.ini debe estar configurado
para ser capaz de enviar mensajes de correo

Opciones:
- si el modo debug está a 1 muestra el estado de las webs
en pantalla al consultar la direccion
- si el modo debug está a 0 no muestar mensaje y en caso de
no contestar alguna de las webs envía un mensaje de correo
a la dirección indicada con los detalles del fallo

*/
/********************************************************/

//modo depuracion [1/0] = [On / Off]
$debug = 0;

//páginas a consultar
$sites = array();
array_push ($sites, 'http://www.google.es');
array_push ($sites, 'http://barrapunto.com');
array_push ($sites, 'http://cuadernodelviaje.blogspot.com');


//configuracion de los parámetros de correo
$from = "From: ER CHIVATO ";
$to = "tu_direccion@de_correo_com";
$subject = "ATENCION la url no respondio: ";

if ($debug == 1 )
{
//Modo depuración activado
foreach ($sites as $url)
{
$sitio = @fopen($url,"r");
if ($sitio){
echo $url." on-line.
";
}else{
echo $url." no respondio.
";
}
}
}else{


//modo depuración esta desactivado
foreach ($sites as $url)
{
$sitio = @fopen($url,"r");

//si no responde enviamos un mail
if (!$sitio){
$mensaje = $url." no respondio.
";
$cabeceras = "MIME-Version: 1.0\r\n";
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";
$cabeceras .= $from;
mail( $to , $subject.$url , $mensaje, $cabeceras);
}
}
}
?>


No hay comentarios:

Publicar un comentario