Está en la página 1de 4

Cmo conseguir un explorador de archivos de un sitio web bajo php?

Supongamos que tenemos un servidor remoto que nos permite trabajar con php y al que podemos subir ficheros va ftp o bajo un interface php. Nuestro objetivo es poder navergar por los directorios del servidor siempre a partir de una carpeta determinada y de paso poder ver o bajar los ficheros que all se muestren. El cdigo necesario se encuetra en la pgina directorios.php ubicada como se ve en el esquema de mi sitio en el servidor 1and1.es El siguiente cdigo debe ser llamado con dos parmetros. Uno llamado raiz donde se indica la ruta completa de la carpeta del sitio en el servidor remoto que sirve de raz a partir de la cual queremos navegar por su rbol en sentido ascendente. El otro parmetro, fin es slo el nombre de la carpeta en el que acaba la ruta anterior y que ms atrs de ella no podemos navegar.

Por ejemplo, supongamos la estructura de rbol anterior de un servidor y que queramos observar todos los ficheros y carpetas que cuelgan de INFORMATICA pero no los anteriores. Usaremos el siguiente cdigo dentro de alguna etiqueta html de link de tipo <a href=directorios.php?raiz=repositorio/INFORMATICA&fin=INFORMATICA>haz clic aqu </a>; Directorios.php <html> <head> <title>Navegar por los directorios del servidor</title>

<meta name="keywords" content="Vicente Ordez Daz, utilidades php, utilidades MySql, utilidades Odbc MySql Sqlite"> <meta name="description" content="Cdigo php para navegar por las carpetas de un sitio en un servidor"> <meta name="author" content="Vicente Ordez Daz"> <meta name="rating" content="Educacin y formacin"> <script language="javascript" type="text/javascript"> /* La siguiente funcin es invocada cada vez que se hace click en un de los enlaces que se crean dinmicamente ms 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 enva dicho formulario. Como es un autoprocesado (no tiene valor alguno en el atributo action) se recarga esta misma pgina. */ function recargar(direccion){ document.getElementById("rutaParaLeer").value=direccion; document.fRutas.submit(); } </script> </head> <body> <form name="fRutas" id="fRutas" method="post" action=""> <input type="hidden" value="" name="rutaParaLeer" id="rutaParaLeer"> </form> <? $raiz=trim($_GET['raiz']); function es_raiz($man) {$posibleraiz=false; rewinddir($man); while ($contenido=readdir($man)) {if ($contenido==$_GET['fin']) {$posibleraiz=true; break; } } return $posibleraiz; } // Se define el salto de lnea 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 raz de la particin activa (vlido 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 lgico, el mismo nombre que esta variable.*/

if ($_POST["rutaParaLeer"]==""){ $_POST["rutaParaLeer"]="./".$raiz."/"; } $rutaPadre=$_POST["rutaParaLeer"]."../"; // Se abre el directorio padre para ver si es el raiz $manejadorPadre=opendir($rutaPadre); $dir_raiz=es_raiz($manejadorPadre); // Se abre el directorio a leer. // Se "rebobina" el directorio para asegurarnos de posicionarnos al principio. $manejador=opendir($_POST["rutaParaLeer"]); rewinddir($manejador); echo("<p align='center'>Listado de ficheros del directorio:".$_POST['rutaParaLeer']."</p>"); echo("<p align='center'>"); echo('<table border="1" cellpadding="4" cellspacing="0">'); // Mientras haya elementos (directorios o ficheros) para leer.

while ($contenido=readdir($manejador)) { $nuevaRuta=$_POST["rutaParaLeer"].$contenido."/"; /* 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. */ /* 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 quedara un poco pobre y tendramos que "afinar" ms comprobando, por ejemplo, si el elemento es un enlace simblico.*/ if (is_dir($nuevaRuta)) {if (!((($contenido==".") || ($contenido=="..")) && $dir_raiz)) /* Si es un directorio mostramos el icono correspondiente, creando, adems, un enlace para poder acceder a dicho directorio mediante el formulario y la funcin JavaScript que hemos visto anteriormente en el cdigo.*/ {echo("<tr>"); echo ("<td>"); echo ("<a href='javascript:recargar(\"".$nuevaRuta."\")'>"); echo ("<img src='imagenes/iconos/directorio.gif' title='Directorio' border=0>"); echo ("</a>"); echo ("</td>"); echo("<td>"); echo ("<a title='Directorio' href='javascript:recargar(\"".$nuevaRuta."\")'>"); echo ($contenido); echo ("</a>"); echo ("</td>"); echo ("</tr>"); }

} else { echo ("<tr>"); echo ("<td>"); echo ("<a href='".$_POST["rutaParaLeer"].$contenido."'>"); echo ("<img src='imagenes/iconos/fichero.gif' title='Fichero' border=0>"); echo ("</a>"); echo ("</td>"); echo ("<td>"); echo ("<a title='Fichero' href='".$_POST["rutaParaLeer"].$contenido."'>"); echo ($contenido); echo ("</a>"); echo ("</td>"); echo ("</tr>"); } } // cierre del While // Se cierra el directorio. closedir($manejador); echo("</table></p>"); ?> </body> </html>

También podría gustarte