PHP: Comprobar si una URL esta online

Tengo un código en php que te muestra una imagen u otra si la URL que esta comprobando esta online... El caso esk me sale siempre como si la ruta estuviese mal puesta y yo por más que pienso no se que falla.

Bueno os pongo aqui mismo el script:

estado.php
--------------------------------------------------
[PHP]$online = "online.gif";
$offline = "offline.gif";

$enlinea = fopen("$enlace", "r");
if (!$enlinea){header("Location: $offline");}
else {header("Location: $online");}
fclose($enlinea);
?>[/PHP]

index.php
--------------------------------------------------
[PHP][/PHP]

Los ficheros estado.php, online.gif y offline.gif estan en la carpeta index/estado/ respecto al fichero index.php.

Gracias [bye]
Hola,

Normalmente el "fopen" sólo lo puedes hacer sobre tu propio servidor, en servidores externos NORMALMENTE (que no siempre) si le haces un fopen te dicen que nanai ...

La solucion ? pues fácil [chiu], pasa por hacer una conexion por sockets completa ...

es decir usar fsockopen abriendo el socket al puerto 80 del dominio que quieras mirar ...

Ojo : Si quieres mirar si existe por ejemplo http://www.pepito.com/pepe.html los pasos serian:

1) Crear la conexion con el puerto 80 de http://www.pepito.com
2) Mandarle con un fwrite una peticion GET de /pepe.html

Echale un vistazo a http://es2.php.net/fsockopen que tienes mas o menos las instrucciones ...

Tienes ejemplos concretos ahí de como se hace de todos modos si necesitas alguno más dimelo :)

De todos modos para probar si te funciona bien pasa de primeras del Header y haz un simple echo "online" o echo "offline" ... por si las moscas ;)

Saludos
La verdad esq he entendido casi todo lo que me has dicho pero soy incapaz de escribirlo desde 0 ya que no tengo ni idea de PHP.

Igual es mucho pedir pero me vendría bien que alguien me corrigiese directamente lo que esta mal.

Muchas gracias por la ayuda de todas maneras, veré que puedo hacer...

[bye]
Pasate por aquí y pregunta, encontraras a muchos expertos en el tema: http://www.forosdelweb.com

Ta lego
Hola, aqui te mando un ejemplo funcionando ...

[PHP]
$conexion = @fsockopen("www.google.com", 80, $errno, $errstr, 30);
if (!$conexion) {
echo "Offline";
} else {
echo "Online";
fclose($conexion);
}
?>
[/PHP]

Te explico un poco, es muy sencillo creamos un socket hacia el puerto 80 del servidor que nosotros queramos ... la @ delande del fsockopen es para que no nos devuelva nada la apertura de socket, ya que si no esta online el host daría errores y no nos interesa ...

Y nada simplemete si no existe $conexion pues está offline y si existe está online, es sencillo ...

Recuerda que esto no te sirve para saber si funciona http://www.loquesea.com/algo/ si no que solo te sirve para los hosts ...

Si lo quieres en forma de función ... es modificarlo un poco ... te lo pongo tambien para que te salgan imágenes ... aunque también podrías hacerlo como lo pusiste tu ...

[PHP]

function EstaEnLinea($host){
$conexion = @fsockopen($host, 80, $errno, $errstr, 30);
if (!$conexion) {
echo "\"OffLine\"";
} else {
echo "\"online\"";
fclose($conexion);
}
}


// para llamar a la funcion ...

EstaEnLinea("www.elotrolado.net");
EstaEnLinea("www.elotrolado2.net");

?>
[/PHP]

Te recomiendo que el codigo a parte lo metas por ejemplo en un pequeño iframe ya que mientras comprueba si todos los hosts que metas estan online tardará un tiempo y relentizará la carga de la página, con iframes consigues que se cargue la pagina ... y luego vaya saliendo si están online o no a medida que lo va calculando ...

También puedes bajar el timeout fsockopen (30) por algo menor ... aunque si el host no existe te va responder mucho antes de los 30 segundos ...

Espero que con esto te sirva,

Saludos [bye]

PD: joder que mal se ve el codigo php con esa combinación de colores :(
Despues de leerme lo que has puesto y pensarlo un poco he hecho yo mismo una pequeña modificacion del código que había puesto en un principio. Asi quedaría bien puesto:

estado.php
--------------------------------------------------
[PHP]$online = "online.gif";
$offline = "offline.gif";

$enlinea = @fopen("$enlace", "r");
if (!$enlinea){header("Location: $offline");}
else {header("Location: $online");}
fclose($enlinea);
?>[/PHP]

index.php
--------------------------------------------------
[PHP][/PHP]

Lo único que he hecho ha sido poner un "=" en el src de la imagen (fallo mio... era una tonteria enorme xDD) y una "@" antes del fopen. He comprobado que funciona tanto con urls tipo "loquesea.com" como "loquesea.com/algo/".

Muchas gracias a todos [bye]
5 respuestas