Traductor

Hosting

Ver el contenido de un directorio

Para ver el contenido de un directorio haremos uso de cuatro operaciones básicas que conoceremos a continuación:

opendir();

Debemos empezar por abrir el directorio mediante la función opendir();
El argumento que recibe es el nombre del directorio cuyo contenido queremos leer.
Esta función devuelve un manejador de directorio, de modo similar a lo que sucedió cuando abrimos un fichero.

readdir();

Una vez abierto el directorio recurrimos a la función readdir(); para leer su contenido.
Como argumento le pasamos el manejador que obtuvimos al abrirlo y nos muestra el contenido del directorio.

rewinddir();

Cuando se lee el contenido de un directorio mediante la función anterior, se está moviendo internamente un puntero, de modo análogo a como ocurre con los ficheros.
Si queremos situarlo al principio del directorio, usaremos la función rewinddir(); la cual recibe como argumento, el manejador del directorio.

closedir();

Por último, cuando hayamos terminado de leer el contenido de un directorio, lo cerraremos con closedir();
Esta función recibe como argumento el manejador del directorio.

Caso Práctico

Suponga que desea leer el contenido de la carpeta principal en la partición activa.
Para este ejemplo supondremos que estámos trabajando en un entorno Windows y que nuestra partición se llama C:/
El siguiente script mostrará su contenido:
<?php
// Se define el salto de línea
    define ("salto","<br>\n");
// Se "abre" el directorio principal de la partición.
    $manejador=opendir("C:/");
    echo ("Contenido del directorio principal:".salto);
// Se "rebobina" el directorio para asegurarnos de posicionarnos al principio.
    rewinddir($manejador);
// Mientras haya elementos (directorios o ficheros) para leer.
    while ($contenido=readdir($manejador)){
        echo ($contenido.salto);
    }
// Se cierra el directorio.
    closedir($manejador);
?>

Cuando ejecute este código, verá en su página un lista de los directorios y archivos que tiene en su disco duro.
Sin embargo es una forma bastante limitada de explorar el contenido de su disco duro.
Es por ello que con el siguiente código le ofreceremos al usuario una interfaz mucho mas accesible:
<html>
  <head>
  <title>Navegar por los directorios</title>
  <script language="javascript" type="text/javascript">
/*La siguiente función es invocada cada vez que se hace click en
un de los enlaces que se crean dinámicamente más adelante. Como
argumento recibe la ruta del disco a la que debemos ir a leer.
Este valor lo pasa a un campo oculto de un formulario y envía
dicho formulario. Como es un autoprocesado (no tiene valor alguno
en el atributo action) se recarga esta misma página.*/
  function recargar(direccion){
    document.getElementById("rutaParaLeer").value=direccion;
    document.fRutas.submit();
  }
  </script>
  </head>
  <body>
    <h3>Listado de ficheros y directorios</h3>
    <form name="fRutas" id="fRutas" method="post" action="">
      <input type="hidden" value="" name="rutaParaLeer" id="rutaParaLeer">
    </form>
    <table width="300" border="0" cellpadding="4" cellspacing="0">
    <?php
// Se define el salto de línea
    define ("salto","\n");
/* Se comprueba si la variable de POST llamada "rutaParaLeer" tiene contenido.
Si no lo tiene, es que se acaba de cargar el script en el navegador y se le
asigna la ruta raíz de la partición activa (válido solo para entornos Windows).
Si se ha recargado el script por haber pulsado uno de los enlaces esta variable
tiene el contenido que se haya asignado al campo oculto del formulario. Dicho
campo tien, como es lógico, el mismo nombre que esta variable.*/
    if ($_POST["rutaParaLeer"]==""){
      $_POST["rutaParaLeer"]="C:/";
    }
// Se abre el directorio especificado.
    $manejador=opendir($_POST["rutaParaLeer"]);
// Se "rebobina" el directorio para asegurarnos de posicionarnos al principio.
    rewinddir($manejador);
// Mientras haya elementos (directorios o ficheros) para leer.
    while ($contenido=readdir($manejador)){
      echo ("<tr>".salto);
      echo ("<td>");
/* Cuando se lee cada elemento se establece como nombre completo de dicho
elemento el mismo, precedido por la ruta actual, y se almacena en la
variable $nuevaRuta. */
        $nuevaRuta=$_POST["rutaParaLeer"].$contenido."/";
/* Se comprueba si el nombre completo de la ruta corresponde a un directorio.
Si no es así, asumiremos que, genericamente, es un fichero. En un entorno
Windows, esto nos vale. En un entorno Linux quedaría un poco pobre y
tendríamos que "afinar" más comprobando, por ejemplo, si el elemento
es un enlace simbólico.*/
  if (is_dir($nuevaRuta)){
/* Si es un directorio mostramos el icono correspondiente, creando, además,
un enlace para poder acceder a dicho directorio mediante el formulario
y la función JavaScript que hemos visto anteriormente en el código.*/
          echo ("<a href='javascript:recargar(\"".$nuevaRuta."\")'>");
          echo ("<img src='iconos/directorio.gif' alt='Directorio' border=0>");
          echo ("</a>");
        } else {
/* Si no es un directorio mostramos el icono que hemos puesto para ficheros
(elemento genérico) y no creamos enlace alguno.*/
          echo ("<img src='iconos/fichero.gif' alt='Fichero'>");
        }
        echo ("</td>".salto."<td>");
/* Mostramos el nombre del elemento.*/
        echo ("<b>$contenido</b>");
        echo ("</td>".salto."</tr>".salto);
    }
// Se cierra el directorio.
      closedir($manejador);
    ?>
    </table>
  </body>
</html>
Estudie el código, que emplea funciones que ya conocemos perfectamente, así como recursos HTML y JS. Preste atención a los comentarios ya que le aporta gran valor didáctico.
PHP le permite abrir ficheros de manera remota, es decir, en otro equipo. Desde la versión 5 se ha incorporado la envoltura URL ftp://. Esto significa que podemos abrir directorios de manera remota para trabajar con ellos mediante el protocolo de transferencia de archivos.
Lo cual veremos mas adelante.

Si te hemos ayudado : )

Te agradeceríamos que apoyaras este proyecto



No se te olvide Comentar y Compartir
en:
                          

0 comentarios:

Publicar un comentario