Cómo hacer el mapa de un sitio web

Reflexionemos ahora sobre cómo podríamos mejorar nuestro código. La primera cosa que podemos hacer es añadir el filtro para que no aparezcan, por ejemplo, directorios tales como cgi-bin. Además, no todos los ficheros deberían ser visibles para todo el mundo: queremos mostrar únicamente los scripts PHP y las páginas HTML. Para esto haremos uso de tres arrays, en los cuales almacenaremos valores que servirán para realizar el filtro: el primero contendrá los directorios que no deseamos mostrar, el siguiente los ficheros, y el último las extensiones de los ficheros que podrán ser visualizados. Además, sería útil crear una función que devuelva la extensión del archivo que se le suministre como parámetro.

Listado 6: Obtención de la extensión
function get_extension($name)
{
  $array = explode(".", $name);
  $retval =
      strtolower(array_pop($array));
    return $retval;
}

Puede ser que este método no sea el más eficaz, pero funciona : la cadena $name es dividida en los elementos de un array utilizando . como separador; el último elemento del array es devuelto. Desgraciadamente, este truco no funcionará en el caso de extensiones que contengan un punto en el nombre, por ejemplo .tar.gz. Si queremos que estos ficheros también sean mostrados, tenemos que hacer uso del código presentado en el Listado 7.

Listado 7. Procesamiento de los nombres de ficheros con extensiones dobles
function get_extension($name)
{
  $array = explode(".", $name);
  array_shift($array);
  $retval =
    strtolower(join(".", $array));
  return $retval;
}

Utilizando esta función podremos tomar en cuenta ficheros con la extensión .tar.gz. Sin embargo, ya no podremos trabajar con ficheros cuyos nombres contienen un punto. La solución a este problema consiste en hacer una prueba de corrección para cada extensión encontrada. Este método puede ser más lento y difícil que los descritos anteriormente, en particular para los ficheros que contienen varias extensiones.

La función strtolower() devuelve en letras minúsculas la cadena alfanumérica suministrada como parámetro. Es muy importante hacer esto, sobre todo para las extensiones de tipo .PHP, que en otro caso podrían ser ignoradas.

Cuando ya los arrays y las funciones estén listas, hará falta modificar dos líneas en el bucle que escanea el directorio actual (Listado 8).

Listado 8. Modificación del bucle de escaneo del directorio actual
...
if(is_dir($file) && $file != "." && $file != ".." && !in_array($file, $excludedir))
...
elseif(is_file($file) && $file !=
   basename($PHP_SELF) && array_key_exists(get_extension($file),$display)
      && !in_array($file, $excludefile))
...

Si alguna vez llegan a cambiar los requerimientos de filtrado, será sencillo adaptar el script a las nuevas condiciones agregando o borrando los elementos de los arrays. Hay que tener en cuenta solamente que la declaración del array fuera de la función (como es necesario en este caso) implica que las variables deben ser también declaradas como “globales”.

Nótese que, si bien los ficheros y los directorios excluidos son guardados como valores en sus arrays, las extensiones de los ficheros a mostrar son, en cambio, almacenadas como claves. Es así porque, en el array de extensiones, podemos poner como valores los nombres de los archivos gráficos (iconos) que utilizaremos para visualizar el tipo de cada fichero. De esta manera todo lo que concierne a los tipos de ficheros es declarado y almacenado en un solo lugar.

El script creado a partir de los elementos mencionados hasta ahora debe funcionar correctamente en el directorio principal del servidor, pero todavía tenemos que atar algunos cabos sueltos para poder generar los enlaces a los ficheros (los cuales nos serán necesarios más tarde, para facilitar un poco más el uso del mapa). Por ejemplo, debemos almacenar en alguna parte los nombres de los directorios inicial y principal del servidor. Lo haremos de la manera presentada en el Listado 9.

Listado 9. Nombres de los directorios principal e inicial
...
if(is_dir($file) && $file != "." && $file != ".." && !in_array($file, $excludedir))
...
elseif(is_file($file) && $file !=
   basename($PHP_SELF) && array_key_exists(get_extension($file),$display)
      && !in_array($file, $excludefile))
...

¿Qué es lo que está sucediendo aquí? $REQUEST_URI contiene la ruta relativa al fichero utilizado con respecto al directorio principal (root) del servidor (las siguientes líneas eliminan el nombre del fichero de esta ruta). Esto puede parecer innecesario si queremos solamente mostrar el directorio del script y sus posibles subdirectorios, pero si lo que nos interesa es el contenido entero del servidor, y el script ha sido puesto en un lugar determinado (por razones de seguridad, por ejemplo), esta posibilidad puede eventualmente resultar muy útil. Si además agregamos las siguientes líneas:

$root = str_replace($prefix, "", $root);
$prefix = "";

la ruta relativa al directorio principal del servidor web será eliminada de la ruta actual. $root puede ser utilizado para invocar la función que presenta el contenido de los directorios y permite ver todo el contenido del servidor. Sin embargo, antes de hacerlo siempre es mejor asegurarse si esto está permitido en nuestro sistema.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.