Cómo crear un navegador de archivos con PHP

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

En el post de hoy voy a dejar aquí colgado un pequeño código en el que se desarrolla un navegador de archivos creado con PHP. Trabajar con archivos y sus cosas en php se parece horriblemente a como trabajar con archivos con Python. No se trata de algo muy elaborado ni demasiado bonito. Pero después de haberlo probado más de una y de dos veces en un servidor local, puedo decir que funciona correctamente.

Actualmente lo único que hace es mostrar un listado de los archivos y directorios que encuentre. En principio en la carpeta dónde se encuentre nuestro archivo .php. Nos permitirá movernos por toda la estructura de directorios que tengamos.

Creando un navegador  con PHP

    <?php
    //Funciones:
    //pon_url
    //es_directorio
    /******/
    //las imagenes que se usan vienen dentro de xampp en el directorio icons. Fuera de htdocs.
     
    //Función para establecer la dirección correcta
    function pon_url($un_dir, $un_item) {
        $ini_etiq = "<a href='${_SERVER["PHP_SELF"]}?nuevo_dir"; //la primera parte de la dirección
        $fin_etiq = "</a><br>";
     
        if ($un_item == "..") { //en caso de que $un_item sea ..
            //contamos hasta 1
            if (substr_count($un_dir, "/") >= 1) {
                $un_dir = strtr(dirname($un_dir), "\\", "/"); // Win devuelve '/'
                //acabamos de formar la dirección con esta segunda parte y la imagen de los dos puntos
                echo "<img src='/icons/back.gif'>$ini_etiq=$un_dir'><font size=+2>..</font>$fin_etiq";
            }
        } else { //si $un_item no es ..
            if ($un_dir == "/") { //preguntamos si $un_dir es la raíz
                //formamos la url con esta segunda parte de la url y  su correspondiente icono
                echo "<img src='/icons/folder.gif'>$ini_etiq=/$un_item'>$un_item$fin_etiq";
            } else {
                //se forma la dirección con esta segunda parte de la url y su icono.
                //la / aparece enmedio de $un_dir y $un_item
                echo "<img src='/icons/folder.gif'>$ini_etiq=$un_dir/$un_item'>$un_item$fin_etiq";
            }
        }
    }
     
    // en windows no puede haber un nombre de directorio con dos '/' esto '//' está mal
    function es_directorio($un_dir, $un_item) {  //recibe dos parámetros
        if ($un_dir == '/') { //si $un_dir es /
            //se le antepone / al nombre del item ya que es la raíz del la estrucutra
            //de directorios
            $fich_a_preguntar = "/$un_item";
        } else { //sinó es / suponemos que no es la raíz de la estructura de directorios
            //y por eso / separará el nombre del directorio del nombre del item
            $fich_a_preguntar = "$un_dir/$un_item";
        }
        return (is_dir("$fich_a_preguntar")); //devolvemos true o false según sea o no un directorio
    }
     
    if (isset($_GET['nuevo_dir'])) {
        $nuevo_dir = $_GET['nuevo_dir'];
    } else { // es la primera vez que se ejecuta el script
        $nuevo_dir = getcwd(); //getcwd nos devuelve el directorio actual de trabajo
        if (isset($_SERVER["WINDIR"])) {
            $nuevo_dir = substr($nuevo_dir, 2); // quitamos las 2 letras de la unidad
            $nuevo_dir = strtr($nuevo_dir, "\\", "/"); //cambiamos las \\ por /
        }
    }
     
    //mostramos la nueva url de la dirección eb ka parte superior
    echo "<h2>CARPETA: <i>$nuevo_dir</i></h2>";
     
    //si no se puede abrir el directorio ($nuevo_dir) se muestra el mensaje, sinó se pasa al while.
    //se abre el directorio con el comando opendir
    if (!$df_dir = opendir($nuevo_dir)) {
        die("<h3>*** ERROR: no se ha podido entrar en ($nuevo_dir)</h3>");
    }
     
    //si se puede leer el directorio se hace el while
    while (($item = readdir($df_dir)) !== false) {
        if ($item == ".") { //en caso de que $item sea . se salta a la siguiente iteración del bucle
            continue;
        }
     
        if (es_directorio($nuevo_dir, $item)) {
            //si la función es_directorio devuelve true se le pasan los parámetros
            //$nuevo_dir e $item a la función pon_url
            pon_url($nuevo_dir, $item);
        } else {
            //en caso de que el item sea un archivo se le añade el incono generic.
            echo "<img src='/icons/generic.gif'>$item<br>";
        }
    }
    closedir($df_dir); //cerramos el directorio
    ?>
     


 

Post relacionados

Gasoliprecio, busca las estaciones de servicio con el mejor precio

Acortador de URLs. Crea URL’s cortas desde el escritorio

Organizador de listas M3U. Gestión y reproducción con facilidad