Bienvenido al Imperio Web Inicio    Descargas   Entrar   Envíos   Top 10   Tema   Foros   FAQ
Buscar   
 
 
Principal
 Inicio
 Archivo de Noticias
 AvantGo
 Buscar
 Cambio de Divisas
 Contenido
 El Tiempo
 Encuestas
 Enlaces Web
 Estadísticas
 FeedbackPlus
 Foros
 iwWhois
 Recomiendenos
 Su Cuenta
 Test de Velocidad
 Top 10
 Topics

Usuarios
 Descargas
 Diario de Usuarios
 Enviar Noticias
 Lista de Miembros
 Mensajes Privados
 Salir
 WebMail

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
Predicciones del tiempo

Sorteos

Quiniela Fútbol Lotería Nacional La Primitiva
La Bonoloto El Gordo de la Primitiva
Cupón de la ONCE
Haz click en la imagen del sorteo que quieras consultar

Reloj








Total Hits
Hemos recibido
285901
impresiones desde Enero 2003

- - - Tu Información - - -
Conectado desde IP:
38.107.191.104
Idioma: 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

Lenguaje PHP 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.


 
Enlaces Relacionados
· José Mª Ramos.
· José Mª Ramos
· Más Acerca de Lenguaje PHP
· Noticias de jomra


Noticia más leída sobre Lenguaje PHP:
Verificar una URL Externa


Votos del Artículo
Puntuación Promedio: 4.8
votos: 5


Por favor tómate un segundo y vota por este artículo:









Opciones

  Versión Imprimible

  Enviar a un Amigo

 


Web site engine's code is Copyright © 2002 by PHP-Nuke DN-Estable6.0 v2.0. Derechos Reservados. PHP-Nuke es un Software libre bajo las normas de GNU/GPL.
Página Generada en: 0.108 Segundos