Inicio Apuntes FPApuntes DAWCómo crear un navegador de archivos con PHP

Cómo crear un navegador de archivos con PHP

Publicado por entreunosyceros
Publicado el: Última actualización:

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
    ?>
     

 

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.