404Muchas
veces, hemos visto como en algunos sitios cuando requerimos un archivo o pagina
no existente nos muestran una página personalizada de error, y no la típica
“404 documento no encontrado”. En este artículo, explicaré como hacerlo en
nuestros sitios y sacar provecho de esta personalización.

Introducción

Nota:

Nuestros
ejemplos estarán basados y aplicados sobre un servidor Apache, pero son perfectamente
extendibles a otros webservers. Además, los errores solos serán mostrados
en enlaces dentro del mismo sitio.

Para empezar tendremos que configurar el Apache para que cuando ocurra un
error 404 nos redirija a nuestro script. Para hacer esto modificamos el archivo
.htaccess agregándole o modificando la siguiente línea:

ErrorDocument 404 /path/mi404.php

En caso de que quieran aplicar esto para otros errores el formato es el siguiente:

ErrorDocument nroError path_al_archivo

Una vez configurado nuestro webserver, veamos que tenemos dentro de nuestro
script.

<html> 
<head> 
<title>Documento no encontrado</title> 
</head> 
<body> 
El documento: <b><?=$_SERVER['REQUEST_URI'];?></b> o ha sidoencontrado en nuestro servidor.<br> 
Por favor, bla, bla, bla. 
<!-- 
Recordemos que IE no muestra las paginas de error salvo que sean mayores a 512 bytes 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
--> 
</body> 
</html>

Entre las variables que tenemos disponibles en apache
desde PHP esta $_SERVER[‘REQUEST_URI’]
(o $HTTP_SERVER_VARS[‘REQUEST_URI’]
en php 4.0.x y anteriores) la cual nos indica cual es la URL solicitada al
servidor. Por eso la utilizamos en nuestro script para indicar cual es el
documento o archivo no encontrado.

Algo un poco más funcional

Ahora bien, el ejemplo anterior es bastante sencillo y realmente poco útil
para el administrador del sitio, ya que únicamente informa al navegante de
cual es el documento faltante.

Algo mas útil seria que cuando no se encuentra
un documento se le informe de alguna manera al administrador para que tome
conocimiento inmediatamente, ya sea de algún enlace roto o intento de acceso
a archivos no permitidos.

Para avisarle al webmaster del sitio lo haremos mediante el envío de un correo
electrónico a través de la función mail();

Veamos como quedaría nuestro script:

<html> 
<head> 
<title>Documento no encontrado</title> 
</head> 
<body> 
El documento: <b><?=$_SERVER['REQUEST_URI'];?></b> 
no ha sido encontrado en nuestro servidor.<br> 
El error ha sido comunicado al administrador del sitio. Disculpe las molestias 
ocasionadas.
        

<?
//Indicamos la fecha y hora del suceso.
$fecha = date('d-m-Y H:i:s');
[email protected]';
$asunto='Documento no encontrado.';
$mensaje='El documento: ' . $_SERVER['REQUEST_URI'] . ' no ha sido encontrado en el sitio: ' .$_SERVER['SERVER_NAME']. ' al tratar de ser accedido el ' . $fecha . ' desde la dirección ' . $_SERVER['HTTP_REFERER'];


        

mail($para, $asunto, $mensaje);
?>
<!--
Todo sea por el IE
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --> 
</body>
</html>

Ahora, además del documento le indicamos el sitio,
la fecha y la hora del error, además de la dirección desde la cual
se trato de acceder, esto es util para chequear que los enlaces desde otras
páginas externas a nuestro sitio, estén referenciando documentos existentes
y por ende comunicarles del cambio.

Conclusión

Con esta breve introducción, podrán empezar
a personalizar sus mensajes de errores y aprovecharlos para facilitar la administración
de su sitio, conociendo al instante que links están caídos dentro del sitio.
Ahora, solo resta experimentar y encontrar que datos podemos obtener y cuales
son los que nos interesan.