Verificar la existencia de una URL

14 de mayo de 2001
Valoración del artículo:
Mediante la función fopen de PHP verificamos la existencia de una página externa.
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 16 comentarios al artículo
1 comentario no revisado
15 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: Christian
07/3/04
Yo quiciera saber si también se puede hacer lo mismo con los correos electrónicos (°!°)?
Por: yoyo
02/2/05
creo la funcion fopen tiene algunos problemas con las pag. php, asp. la sgte. direccion me arroja no valida:
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art65.asp

sin embargo existe!
he probado algunas php en unas funciona en otras no
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.
Por: Eduardo
05/12/05
Sólo un pequeño detalle: falta el corchete de cierre en la linea del submit ;)
Por: Oscar Silva
23/2/06
Yo tomé el codigo, abri Dreamweaver, lo puse en Ver código y realicé la funcion Pegar, guarde el archivo como url.htm

Al ejecutarlo con Internet explorer y capturar un nombre de dominio me indica que no encuentra el archivo prueba.php

Espero me apoyen para la correcta implementación
Por: EsMorfeUs
16/7/06
Hola super bueno el desarrollo solo hay que agragrle un pequeño detalle que creo que le falta por lo cual es impresindible. En el Input falto cerrar la linea con el >

<input type="Submit" value="Verificar!">

bueno solo detalles, saludos
Por: EsMorfeUs
16/7/06
Oscar Silva 23/2/06
Yo tomé el codigo, abri Dreamweaver, lo puse en Ver código y realicé la funcion Pegar, guarde el archivo como url.htm

Al ejecutarlo con Internet explorer y capturar un nombre de dominio me indica que no encuentra el archivo prueba.php

Espero me apoyen para la correcta implementación

-------------------------------------------

Saludos Oscar me parece que es correcto el error que te arroja alomejor no te has fijado bien en la siguiente linea de de tu pagina..

<form action="prueba.php" method="post">

seria bueno que el archivo lo guardas y actualizaras asi...

nombre pagina : url.php y despues modificar la linea dentro de la pagina

<form action="url.php" method="post">


Saludos Oscar

Por: Manuel
10/6/07
Yo modifique el ejemplo para leer un archivo xml remoto desde php como archivo de texto linea por linea, bien en forma local trabaja sin problemas, pero ya en red en FF funciona sin problemas, pero en IE me dice "acceso denegado", tengo el php en mi servidor y nada, que onda?
Por: porkeno
25/10/07
mejor usar la funcion file_exist
http://cl.php.net/manual/es/function.file-exists.php
Por: Pablo
05/1/08
Hay que poner una @ en el fclose, si pones el fclose antes del return...
Sino marca el error...si la url no es válida...
Por: Martin
25/3/08
Ejecuto el codigo pero me pide el archivo enlace.php, soy nuevo en esto y quisiera saber que debe contener ese archivo para que pueda ejecutar el codigo correctamente

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