Verificar la existencia de una URL

Valoración del artículo:
Mediante la función fopen de PHP verificamos la existencia de una página externa.
Publicado: 14/5/01
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Ya hemos visto las funciones de gestión de archivos más comúnmente utilizadas en PHP. Sirvámonos de la más clásica de todas ellas, fopen, para crear un script que verifique la existencia de una URL.

Este tipo de script puede ser utilizado para múltiples propósitos: Detectar si los enlaces están rotos, verificar una etapa de inscripción en un formulario...

En este caso, hemos simplificado al máximo su contenido de manera a poner evidencia su funcionamiento. Otro tipo de mejoras tales como la verificación de la extensión del archivo (.asp, .php, ...) o del protocolo de transferencia (http, ftp...) pueden ser introducidas afín de personalizar su uso para distintas aplicaciones.

A continuación podéis ver como quedaría el script:

<?
function verificar_url($url)
{

   //abrimos el archivo en lectura
   $id = @fopen($url,"r");
   //hacemos las comprobaciones
   if ($id) $abierto = true;
   else $abierto = false;
   //devolvemos el valor
   return $abierto;
   //cerramos el archivo
   fclose($id);
}
?>
<html>
<head>
   <title>Verificacion de URL</title>
</head>
<body>
<?
if (!isset($url))
{
?>
   <form action="enlace.php" method="post">
   Indica tu URL:<br>
   <input type="Text" size="25" maxlength="100" name="url" value="http://">
   <input type="Submit" value="Verificar!"
   </form>
<?
}
else
{
   $abierto = verificar_url($url);
   if ($abierto) echo "La URL existe!";
   else echo "La URL no existe o es inaccesible...";
}
?>
</body>
</html>



Hemos introducido en el mismo script que se encarga de verificar la URL el formulario que se encarga de recogerla. Así, podemos dividir el script en dos partes: Una primera que se encarga de recoger la URL en un campo texto y una segunda que es la que verdaderamente evalúa la existencia de la URL.

Para hacer más aplicable el script hemos dejado la evaluación propiamente dicha en forma de función que podréis copiar y pegar en vuestra librería particular. Como podéis ver, el modo de operar es extremadamente sencillo:

  • Abrimos el archivo remoto por medio de la función fopen en modo solo lectura. A notar que precediendo a la función fopen hemos introducido un símbolo arroba @ cuyo cometido es el de ignorar el posible error producido por la sentencia. Esto nos evita ver el mensaje de error que es mostrado cuando la URL no existe.

  • Verificamos que el identificador de apertura $id no esta vacío. Es en este punto donde podemos implementar a nuestra función las mejoras de las que hemos hablado, las cuales le confieren la verdadera utilidad.

  • Devolvemos un valor true o false dependiendo del éxito de la conexión.


Como podéis ver el script no reviste ninguna dificultad y puede sernos muy práctico.

Comentarios
Fueron enviados 15 comentarios al artículo
10 comentarios no revisados
5 comentarios revisados:
Por: Ferdy
27/5/01
La función dará un falso positivo en casos donde el servidor tenga preparada una pagina para errores de tipo 404.
Ej.: http://www.desarrolloweb.com/estonoexiste
La respuesta del Script es como si existiera la URL, cuando la verdad es que no, puesto que el servidor Web responde a esa petición devolviendo la página de HTTP 404: Not Found, pero PHP se cree que la URL existe.
Por: Walter E Rarak
03/9/01
Si es verdad lo que dice Fredy pero hay que tener en cuenta que si te devuelve un ok por mas que sea un 404 de error quiere decir que el dominio aun está activo y por ende existe...

realmente esta es una utilidad muy buena para aquellas personas que quieran ahorrar tiempo buscando sitios que a lo mejor existen
Por: R@m O'Net
27/3/02
Tambien da error, como si no existiera la web cuando el servidor pilla el user-agent y no es uno de los que acepta.

Por ejemplo si probais con http://www.google.com/search?q=php vereis que da error y si lo haceis directamente desde google os funcionará.

Por: yomismo
09/12/02
Aunque te indique si el dominio está activo, no sirve para verificar la existencia de un fichero concreto en el dominio, si este tiene activada redirección en caso de errores.
Por: Pako Uc
20/6/05
El script tiene un detalle que considero como error: la función nunca cerrará el archivo que se abre, puesto que la función fclose se encuentra después de la instrucción return. El código corregido quedaría así:

<?
function verificar_url($url)
{
    //abrimos el archivo en lectura
    $id = @fopen($url,"r");
    //hacemos las comprobaciones
    if ($id) $abierto = true;
    else $abierto = false;
    //cerramos el archivo
    @fclose($id);
    //devolvemos el valor
    return $abierto;
}
?>
<html>
<head>
    <title>Verificacion de URL</title>
</head>
<body>
<?
if (!isset($url))
{
?>
    <form action="prueba.php" method="post">
    Indica tu URL:<br>
    <input type="Text" size="25" maxlength="100" name="url" value="http://">
    <input type="Submit" value="Verificar!"
    </form>
<?
}
else
{
    $abierto = verificar_url($url);
    if ($abierto) echo "La URL existe!";
    else echo "La URL no existe o es inaccesible...";
}
?>
</body>
</html>


Con esto funciona bien, además las direcciones expuestas en comentarios anteriores las indica correctamente, a excepción de la "ASP", que efectivamente indica que no existe, siendo lo contrario.

Manuales relacionados
Categorias relacionadas
El autor
Rubén Alvarez
Redactor de DesarrolloWeb.com
http://www.desarrolloweb.com
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo