Cómo hacer el mapa de un sitio web

Ning�n fragmento de c�digo est� nunca exento de errores, independientemente de cu�nto tiempo se invierta en su comprobaci�n. Si el lector ha logrado encontrar en el presente art�culo alg�n defecto o error de razonamiento, le invito a compartir sus comentarios en el foro de PHP Solutions o directamente conmigo escribiendo a la direcci�n: [email protected].

Listado 13: C�digo completo del script para generar el mapa de un sitio web
<?
/* Sitemap version 2.0 (C) copyright Metalhead 2003
 * P�gina web: http://www.metalhead.ws/phpbin/
 * Este script se distribuye bajo los t�rminos de la
 * Licencia P�blica General GNU (GNU GPL)
 * Una copia de la GPL ha sido inclu�da con el script. */
/* Secci�n de Configuraci�n */
$showsize = 1; /* Mostrar el tama�o de los archivos? 1 = s�, 0 = no */
/* Array de tipos de archivos visualizados y sus respectivos iconos.
 * Sintaxis: $display[filetype] = "picture"; */
$display[php] = "php.gif";
$display[html] = "html.gif";
$display[htm] = "html.gif";
$display[shtml] = "html.gif";
/* Array de directorios que no deben ser visualizados.
 * Sintaxis: $excludedir[] = "directory"; */
$excludedir[] = "temp";
$excludedir[] = "tmp";
/* Array de archivos que no ser�n visualizados. */
$excludefile[] = "index.php";
?>
<html><head><title>Mapa del sitio web</title></head>
<body>
<b>Mapa del sitio web</b><p>
<?
$stime = gettimeofday();
/* prueba inicial... */
$root = getcwd();
$pre = explode("/", $REQUEST_URI);
array_pop($pre);
$prefix = join("/", $pre);
/* Si el script se encuentra en un subdirectorio, descomenta las
 * siguientes dos lineas para generar el �rbol de todos los
 * archivos y directorios del servidor web */
//$root = str_replace($prefix, "", $root);
//$prefix = "";
$root .= "/";
/* Visualiza el nombre del servidor y el directorio */
echo "<table cellspacing=0 cellpadding=0 border=0>\n";
echo "<tr><td><img align=absmiddle src=server.gif> http://$SERVER_NAME";
echo "$prefix/";
echo "</td></tr><tr><td><img align=absmiddle src=vertical.gif></td></tr>\n";
function get_extension($name)
{
   $array = explode(".", $name);
   $retval = strtolower(array_pop($array));
   return $retval;
}
/* Rekurencja... */
function list_dir($chdir)
{
   /* algunas variables globales y un poco de orden */
   global $root, $prefix, $PHP_SELF, $SERVER_NAME, $showsize, $display, $excludedir, $excludefile;
   unset($sdirs);
   unset($sfiles);
   chdir($chdir);
   $self = basename($PHP_SELF);
  /* abrimos el directorio actual */
  $handle = opendir('.');
  /* leemos el directorio. Si el objeto
  * es un directorio lo introducimos a
  * $sdirs, si se trata de un archivo
  * que nos interesa (exceptuando el
  * que contiene este script), lo colocamos
  * en $sfiles */
  while ($file = readdir($handle))
  {
    if(is_dir($file) && $file !=
       "." && $file != ".."
       && !in_array($file,
         $excludedir))
    { $sdirs[] = $file; }
    elseif(is_file($file)
      && $file != "$self"
      && array_key_exists(
        get_extension($file),
          $display)
      && !in_array($file,
        $excludefile))
    { $sfiles[] = $file; }
  }
   /* contamos las barras para saber la profundidad a la que estamos
    * o en la estructura de directorios y cu�ntos segmentos debemos
    * usar de la rama en la que estamos */
   $dir = getcwd();
   $dir1 = str_replace($root, "", $dir."/");
   $count = substr_count($dir1, "/") + substr_count($dir1, "\\");
   /* mostramos por pantalla los nombres y obtenemos la lista recursiva de los
    * directorios */
   if(is_array($sdirs)) {
      sort($sdirs);
      reset($sdirs);
      for($y=0; $y<sizeof($sdirs); $y++) {
         echo "<tr><td>";
         for($z=1; $z<=$count; $z++)
         { echo "<img align=absmiddle src=vertical.gif>&nbsp;&nbsp;&nbsp;"; }
         if(is_array($sfiles))
         { echo "<img align=absmiddle src=verhor.gif>"; }
         else
         { echo "<img align=absmiddle src=verhor1.gif>"; }
         echo "<img align=absmiddle src=folder.gif>
               <a href=\"http://$SERVER_NAME$prefix/$dir1$sdirs[$y]\">$sdirs[$y]</a>";
         list_dir($dir."/".$sdirs[$y]);
      }
   }
   chdir($chdir);
   /* visitamos cada uno de los elementos del array de archivos
    * y los imprimimos */
   if(is_array($sfiles)) {
      sort($sfiles);
      reset($sfiles);
      $sizeof = sizeof($sfiles);
      /* �qu� tipos de ficheros deben ser visualizados? */
      for($y=0; $y<$sizeof; $y++) {
         echo "<tr><td>";
         for($z=1; $z<=$count; $z++)
         { echo "<img align=absmiddle src=vertical.gif>&nbsp;&nbsp;&nbsp;"; }
         if($y == ($sizeof -1))
         { echo "<img align=absmiddle src=verhor1.gif>"; }
         else
         { echo "<img align=absmiddle src=verhor.gif>"; }
         echo "<img align=absmiddle src=\"";
         echo $display[get_extension($sfiles[$y])];
         echo "\"> ";
         echo "<a href=\"http://$SERVER_NAME$prefix/$dir1$sfiles[$y]\">$sfiles[$y]</a>";
         if($showsize) {
            $fsize = @filesize($sfiles[$y])/1024;
            printf(" (%.2f kB)", $fsize);
         }
         echo "</td></tr>";
         echo "<tr><td>";
      }
      echo "<tr><td>";
      for($z=1; $z<=$count; $z++)
      { echo "<img align=absmiddle src=vertical.gif>&nbsp;&nbsp;&nbsp;"; }
      echo "</td></tr>\n";
   }
}
list_dir($root);
echo "</table>\n";
/* �Cu�nto tiempo nos llev�? */
$ftime = gettimeofday();
$time = round(($ftime[sec] + $ftime[usec] / 1000000) - ($stime[sec] + $stime[usec] / 1000000), 5);
echo "<center>Tiempo de generaci�n de la p�gina: $time segundos</center>\n";
?>
</body></html>

COMPARTE ESTE ARTÍCULO

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