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

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP