 |
Buscar |
| |
|
Quien esta en Linea |
Actualmente hay 8 invitados, 0 miembro(s) conectado(s).
Eres un Usuario Anónimo. Puedes registrarte Aquí | |
|
Idioma |
Selecciona tu Idioma preferido:
| |
|
El Tiempo |

| |
|
Sorteos |



Haz click en la imagen del sorteo que quieras consultar | |
|
Total Hits |
Hemos recibido 285901 impresiones desde Enero 2003 - - - Tu Información - - -Conectado desde IP: 38.107.191.104Idioma: English Navegador que usas: Resolución de Pantalla:
| |
|  |
Verificar una URL Externa
|
| | Enviado el Sábado, 27 de Enero del 2007 (0:24:56) por jomra |
Por: José Mª Ramos.
En muchas ocasiones queremos saber si un sitio web se encuentra activo o comprobar los enlaces a los que apunta nuestra página. Esto es algo fácil de lograr, pudiendo utilizarse diferentes métodos.
PHP nos ofrece diversas maneras de poder conseguirlo mediante el uso de algunas funciones (FOPEN, FSOCKOPEN y funciones CURL).
Vamos a empezar con la más común de ellas, FOPEN.
1.- FOPEN es una función que abre un archivo o una URL. Si la apertura tiene exito devuelve un número (manejador del fichero),
en caso contrario devuelve FALSE y se genera un error.
Aprovechando esto lo podemos realizar un sencillo script que abra en modo de solo lectura (r) una URL.
A tener en cuenta: - Utilizaremos @ para ignorar el posible error producido por la sentencia.
- fopen necesita que la URL se encuentre precedida de 'http://'.
|
function Validar_URL($url) {
if(!preg_match('@^http://@',$url)) $url = 'http://'.$url; // Añadimos http:// si no viene incluida.
$fp = @fopen($url, 'r'); // Abrimos la dirección URL.
if ($fp == false) return false; // Comprobamos si hemos tenido exito.
@fclose($fp); // Cerramos la conexión.
return true;
}
|
Podemos reducir el código empleando el operador ternario "? :".
|
function Validar_URL($url) {
if(!preg_match('@^http://@',$url)) $url = 'http://'.$url;
return (($fp = @fopen($url, 'r')) === false) ? false : @fclose($fp);
}
|
2.- FSOCKOPEN inicia una conexión a través de sockets con el recurso especificado, si falla devuelve FALSE.
A tener en cuenta: - FSOCKOPEN puede no estar activada en su servidor. Compruebelo en phpinfo.php
- Las URLS llamadas por fsockopen no deben ir precedidas por 'http://'.
- Si queremos comprobar una URL compleja, deberemos procesarla previamente con "parse_url".
Para URLs simples, tipo www.cualquiersitio.com podemos utilizar el siguiente script:
|
function Validar_URL($url) {
if(!preg_match('@^http://@',$url)) $url = 'http://'.$url; // Eliminamos http:// si viene incluida.
return (($fp = @fsockopen($url, 80)) === false) ? false : @fclose($fp); // Comprobamos y devolvemos el resultado
} // cerrando la conexión con fclose.
|
en caso contrario utilizaremos un script algo más elaborado:
|
function Validar_URL($url) {
if(!preg_match('@^http://@',$url)) $url = 'http://'.$url; // Eliminamos http:// si viene incluida.
$a_url = parse_url($url); // Procesamos la URL.
$fp = @fsockopen($a_url['host'], 80, $errno, $errstr, 30); // Abrimos la conexión.
if (!$fp) return false; // Si no se puede abrir, devuelve FALSE.
$page .= isset($a_url['path']) ? $a_url['path'] : ''; // Creamos consulta, añadiendo el path si existe.
$page .= isset($a_url['query'])?'?'.$a_url['query']:''; // hacemos lo mismo con el resto de la consulta
// Sustituir ` por barra
fputs($fp, "GET $a_url[path]?$a_url[query] HTTP/1.0`r`nHost: $a_url[host]`r`nConnection: Close`r`n`r`n");
$head = fread($fp, 128); // Leemos la cabecera del fichero
$response=split(" ",$head); // y la descomponemos.
@fclose($fp); // Cerramos la conexión.
if (preg_match('#^HTTP/.*s+[200|302]+s#i', $head)) { // Comprobamos si contine los codigos de estado HTTP
return true; // 200 o 302, si es así devolvemos TRUE
} else {
return false; // en caso contrario devolvemos FALSE.
}
}
|
aún podemos mejorar el scritp haciendo que nos devuelva el codigo de estado HTTP
|
function Validar_URL($url) {
$respuesta = array( 100 => 'Continue', 101 => 'Switching Protocols',
200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content',
205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently',
302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect',
400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found',
405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required',
408 => 'Request Time-out', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required',
412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Large',
415 => 'Unsupported Media Type', 416 => 'Requested range not satisfiable', 417 => 'Expectation Failed',
500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable',
504 => 'Gateway Time-out', 505 => 'HTTP Version not supported'
);
if(!preg_match('@^http://@',$url)) $url = 'http://'.$url;
$a_url = parse_url($url);
$fp = @fsockopen($a_url['host'], 80, $errno, $errstr, 30);
if (!$fp) return false;
$page .= isset($a_url['path']) ?$a_url['path']:'';
$page .= isset($a_url['query'])?'?'.$a_url['query']:'';
// Sustituir ` por barra
fputs($fp, "GET $a_url[path]?$a_url[query] HTTP/1.0`r`nHost: $a_url[host]`r`nConnection: Close`r`n`r`n");
$head = fread($fp, 128);
$response=split(" ",$head);
@fclose($fp);
return $respuesta[$response[1]];
}
|
3.- Por último, si nuestro servidor tiene instalado el paquete CURL (Client URL Library), podemos utilizar sus funciones para comprobar una URL.
Vamos a utilizar: - curl_init() para inicializar una sesión CURL.
- curl_setopt() para asigna un valor a una opción de una sesión CURL.
- curl_exec() para ejecutar una sesión CURL.
- curl_error() para obtener el último error de la sesión actual.
- curl_getinfo() para Obtener información relativa a la transferencia.
- curl_close() para cerrar la sesión CURL.
veamos el script
|
function Validar_URL($url) {
$fp = curl_init(); // create cURL handle (ch)
if (!$fp) die("No es posible iniciar sesión CURL");
$ret = curl_setopt($fp, CURLOPT_URL, $url); //La URL que se quiere obtener. Se puede indicar en init.
$ret = curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_setopt($fp, CURLOPT_TIMEOUT, 30);
$ret = curl_exec($fp);
if (empty($ret)) {
die(curl_error($fp));
curl_close($fp);
} else {
$info = curl_getinfo($fp, CURLINFO_HTTP_CODE);
curl_close($fp);
return $info;
}
}
|
y eso es todo.
| Autor: José Mª Ramos
Reconocimiento-NoComercial-SinObrasDerivadas 2.5.
|
|
|
| |
|
Votos del Artículo |
Puntuación Promedio: 4.8 votos: 5

| |
|