Inicio PHP Mis Funciones Comprobar si una URL esta online

Comprobar si una URL esta online

Miércoles, 29-12-2010 22:20 - Leer comentarios - Comentar

Imagine que usted necesita comprobar si un sitio está en línea o no, parece bastante fácil, ya que hay un montón de herramientas para comprobar esto, pero esto puede ser un cuello de botella enorme para su aplicación.
He tratado de diferentes maneras con los sockets, header y curl con el fin de saber cuál es la opción más rápida.
Probado el código hecho a la yahoo.com sitio (10 intentos cada uno y seguimos mejor resultado con el tiempo):

Sockets + Header:
php

if (!$url) return false; 
$url = array_map('trim', $url);
$url['port'] = (!isset($url['port'])) ? 80 :
(int)$url['port'];
$path = (isset($url['path'])) ? $url['path'] : '/';
$path .= (isset($url['query'])) ? "?$url[query]" : '';
if (isset($url['host']) && $url['host'] != gethostbyname($url['host'])) {
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
if (!$fp) return false; //socket not opened
fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n"); //socket opened
$headers = fread($fp, 4096);
fclose($fp);
if(preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers)){//matching header
return true;
}
else return false;
} // if parse url
else return false;
?>
Tiempo: 0.222 segundos, nunca mas 0.225s

Curl:
php
$resURL = curl_init(); 
curl_setopt($resURL, CURLOPT_URL, $url);
curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($resURL, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback');
curl_setopt($resURL, CURLOPT_FAILONERROR, 1);
curl_exec ($resURL);
$intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE);
curl_close ($resURL);
if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) {
return false;
}
else return true;
Tiempo: 0.224 segundos, pocas veces alcanzado 0.227s

Headers:
php
@$headers = get_headers($url); 
if (preg_match('/^HTTP\/\d\.\d\s+(200|301|302)/', $headers[0])){
return true;
}
else return false;

Tiempo: 0.891 segundos, 1.5s veces mas
Como se puede ver para mí la forma más rápida es Socket + Header, a pesar de curl es muy rápido!
Tenga en cuenta también, que no hizo uso de otros sistemas tales como fopen o file_get_contents ya que no es necesario recuperar la página, y lo que necesitamos es solo el header

Extra, la forma correcta de verificar la URL:
php
function isURL($url){
$pattern='|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i';
if(preg_match($pattern, $url) > 0) return true;
else return false;
}

Comentarios

Lucinda - Martes, 08-11-2011 10:32

I'll try to put this to good use imeamditely.


Miguel - Martes, 21-06-2011 14:59

Que pagina no puedes abrir Folken??


Folken - Martes, 21-06-2011 04:03

no puedo abrir la pagina.


Miguel - Martes, 15-02-2011 02:05

Cualquiera de las maneras esta bien
pero la ultima creo que es la mejor y mas sencilla


No se permiten comentarios en este momento.