phantomon

directorios.php

Apr 25th, 2012
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.86 KB | None | 0 0
  1. <?php
  2. /* EXPLORADOR DE CARPETAS Y ARCHIVOS CON PHP
  3.  * Documento explora.php
  4.  * Explorador de carpetas y archivos usando el sistema de ficheros de PHP.
  5.  * Autor: Andrés de la Paz © 2010
  6.  * Contacto: www.wextensible.com
  7.  */
  8.  
  9. //Por defecto la primera vez que abrimos este explorador toma
  10. //como carpeta la del php actual. La constante __FILE__ es la
  11. //ruta del archivo PHP actual. Con dirname obtenemos la carpeta.
  12. $ruta = dirname(__FILE__)."/";
  13. //Para abrir archivos necesitaremos poner la codificación
  14. //adecuada con estos valores
  15. $array_codif = Array(
  16. "UTF-8",
  17. "ISO-8859-1",
  18. "ISO-8859-15"
  19. );
  20.  
  21. //Por defecto usamos esta para htmlentities (ver más abajo)
  22. $codificacion = "ISO-8859-1";
  23.  
  24. //Vemos si hay algo en el GET
  25. if (isset($_GET)){
  26.     foreach($_GET as $campo=>$valor){
  27.         switch ($campo) {
  28.             //Obtenemos una ruta, carpeta o archivo
  29.             case "una-ruta":
  30.                 $ruta = htmlspecialchars($valor, ENT_QUOTES);
  31.                 if (get_magic_quotes_gpc() == 1) $ruta = stripslashes($ruta);
  32.                 break;
  33.             //Vemos la codificación
  34.             case "una-codificacion":
  35.                 $codificacion = htmlspecialchars($valor, ENT_QUOTES);
  36.                 if (get_magic_quotes_gpc() == 1) $codificacion = stripslashes($codificacion);
  37.                 break;                
  38.      
  39.         }
  40.     }
  41. }
  42.  
  43. //Si la ruta es vacía, pone la del presente script
  44. if ($ruta == "") $ruta = dirname(__FILE__)."/";
  45.  
  46. //Esta variable contendrá la lista de nodos (carpetas y archivos)
  47. $presenta_nodos = "";
  48.  
  49. //Esta variable es para el contenido del archivo
  50. $presenta_archivo = "";
  51.  
  52. //Si la ruta es una carpeta, la exploramos. Si es un archivo
  53. //sacamos también el contenido del archivo.
  54. if (is_dir($ruta)){//ES UNA CARPETA
  55.     //Con realpath convertimos los /../ y /./ en la ruta real
  56.     $ruta = realpath($ruta)."/";
  57.     //exploramos los nodos de la carpeta
  58.     $presenta_nodos = explora_ruta($ruta);
  59. } else {//ES UN ARCHIVO
  60.     $ruta = realpath($ruta);
  61.     //Sacamos también los nodos de la carpeta
  62.     $presenta_nodos = explora_ruta(dirname($ruta)."/");
  63.     //Y sacamos el contenido del archivo
  64.     $presenta_archivo = "<br />CONTENIDO DEL ARCHIVO: ".
  65.     $ruta."<pre>".
  66.     explora_archivo($ruta, $codificacion).
  67.     "</pre>";
  68. }
  69. //Función para explorar los nodos de una carpeta
  70. //El signo @ hace que no se muestren los errores de restricción cuando
  71. //por ejemplo open_basedir restringue el acceso a algún sitio
  72. function explora_ruta($ruta){
  73.     //En esta cadena haremos una lista de nodos
  74.     $cadena = "";
  75.     //Para agregar una barra al final si es una carpeta
  76.     $barra = "";
  77.     //Este es el manejador del explorador
  78.     $manejador = @dir($ruta);
  79.     while ($recurso = $manejador->read()){
  80.         //El recurso sera un archivo o una carpeta
  81.         $nombre = "$ruta$recurso";
  82.         if (@is_dir($nombre)) {//ES UNA CARPETA
  83.             //Agregamos la barra al final
  84.             $barra = "/";
  85.             $cadena .= "CARPETA: ";
  86.         } else {//ES UN ARCHIVO
  87.             //No agregamos barra
  88.             $barra = "";
  89.             $cadena .= "ARCHIVO: ";
  90.         }
  91.         //Vemos si el recurso existe y se puede leer
  92.         if (@is_readable($nombre)){
  93.             $cadena .= "<a href=\"".$_SERVER["PHP_SELF"].
  94.             "?una-ruta=$nombre$barra\">$recurso$barra</a>";
  95.         } else {
  96.             $cadena .= "$recurso$barra";
  97.         }
  98.         $cadena .= "<br />";
  99.     }
  100.     $manejador->close();
  101.     return $cadena;
  102. }
  103.  
  104. //Función para extraer el contenido de un archivo
  105. function explora_archivo($ruta, $codif){
  106.     //abrimos un buffer para leer el archivo
  107.     ob_start();
  108.     readfile($ruta);
  109.     //volcamos el buffer en una variable
  110.     $contenido = ob_get_contents();
  111.     //limpiamos el buffer
  112.     ob_clean();
  113.     //retornamos el contenido después de limpiarlo
  114.     //aplicando la codificación seleccionada
  115.     return htmlentities($contenido, ENT_QUOTES, $codif);
  116. }
  117.  
  118. ?>
  119. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  120. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  121. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  122. <head>
  123.     <title>Explora carpetas</title>
  124.     <meta http-equiv="X-UA-Compatible" content="IE=8" />    
  125.     ...  
  126. </head>
  127. <body>
  128.     ...
  129.     <h3>Opciones de configuración PHP (restringen explorador)</h3>
  130.     <ul>
  131.     <?php
  132.         $opciones = "<li><a href=\"http://docs.php.net/manual/es/ini.sect.safe-mode.php#ini.safe-mode\">".
  133.         "<code>safe_mode</code></a> ";
  134.         if (ini_get("safe_mode")){
  135.             $opciones .= ": activado";
  136.         } else {
  137.             $opciones .= ": desactivado";
  138.         }
  139.         $opciones .= "</li>".
  140.         "<li><a href=\"http://docs.php.net/manual/es/ini.core.php#ini.open-basedir\">".
  141.         "<code>open_basedir</code></a>: ".ini_get("open_basedir")."</li>".        
  142.         "<li><a href=\"http://docs.php.net/manual/es/function.getmyuid.php\">".
  143.         "<code>getmyuid()</code></a>: ".getmyuid()."</li>".
  144.         "<li><a href=\"http://docs.php.net/manual/es/function.getmygid.php\">".
  145.         "<code>getmygid()</code></a>: ".getmygid()."</li>";
  146.         echo $opciones;        
  147.     ?>
  148.     </ul>
  149.    
  150.     <h3>Exploración</h3>
  151.     <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="get">
  152.         Ruta <small>(En Windows pueden usarse ambas barras "/" y "\")</small>
  153.         <br /><textarea rows="5" cols="50" name="una-ruta"
  154.         ><?php echo $ruta; ?></textarea><br />
  155.         Codificación para ver archivos:
  156.         <select name="una-codificacion">
  157.             <?php
  158.                 foreach ($array_codif as $i=>$val){
  159.                     echo "<option value=\"$val\"";
  160.                     if ($codificacion == $val) echo " selected=\"selected\"";
  161.                     echo ">$val</option>";
  162.                 }
  163.             ?>
  164.         </select><br />
  165.         <input type="submit" value="enviar" />
  166.     </form>
  167.        
  168.     <?php
  169.         echo "<br />$presenta_nodos";
  170.         echo "<br />$presenta_archivo";
  171.     ?>
  172. </body>
  173. </html>
Advertisement
Add Comment
Please, Sign In to add comment