es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP cómo mostrar la carpeta y su contenido mientras también se puede descargar el contenido.

Estoy tratando de crear un servidor de archivos. Básicamente, funciona de la siguiente manera: tienes muchas carpetas que contienen archivos y cuando haces clic en un archivo, lo descargas; si es una carpeta, puedes abrirla y ver su contenido.

Mi pregunta es: ¿Cómo puedo crear este sistema? He estado intentando usar FilesystemIterator, pero no sé cómo proceder.

Este es mi código PHP que estoy usando, el cual está dentro de un elemento <div>:

“`php
<?php
$filesInFolder = array();
$directory = "src";
$iterator = new FilesystemIterator($directory);

<pre><code> foreach($iterator as $entry){
$filesInFolder[] = $entry->getFilename();
}

foreach($filesInFolder as $file){
echo "<a href='/$file'> $file </a>";
}
?>
</code></pre>

“`

Y esta es mi estructura de archivos:
estructura de archivos

Sé que es posible crear esto, simplemente no sé cómo hacerlo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un servidor de archivos, se puede utilizar PHP para listar los archivos en un directorio y mostrarlos en la página web como enlaces. Al hacer clic en un archivo, se debe descargar automáticamente. Si se hace clic en una carpeta, se deben mostrar los contenidos de la carpeta.

    El código actual es un buen comienzo. Utiliza FilesystemIterator para obtener los nombres de archivo en el directorio y los almacena en una matriz. Luego recorre la matriz y muestra cada nombre de archivo como un enlace. Sin embargo, los enlaces actualmente solo apuntan al nombre de archivo en sí mismo, no al archivo real.

    Para hacer que los enlaces descarguen los archivos al hacer clic, agregue el atributo “download” a las etiquetas de anclaje. Esto obligará al navegador a descargar el archivo en lugar de abrirlo.

    Para manejar clics en carpetas, se puede verificar si la entrada actual en el iterador es un directorio utilizando el método “isDir”. Si es un directorio, se pueden mostrar sus contenidos creando un nuevo FilesystemIterator para ese directorio y repitiendo el mismo proceso.

    Aquí hay un ejemplo de código para manejar clics en archivos y carpetas:

    `
    isDir ()) {
    // Mostrar enlace de carpeta
    $ foldername = $ entry-> getBasename ();
    echo "$foldername/
    ";

    // Mostrar contenido de carpeta de carpeta clickeada
    if (isset ($ _GET ['folder']) && $ _GET ['folder'] == $ foldername) {
    $ innerIterator = new FilesystemIterator ($ entry-> getPathname ());
    foreach ($ innerIterator como $ innerEntry) {
    if (! $ innerEntry-> isDir ()) {
    $ filename = $ innerEntry-> getFilename ();
    echo "$filename
    ";
    }
    }
    }
    }
    else {
    // Mostrar enlace de archivo
    $ filename = $ entry-> getFilename ();
    echo "$filename
    ";
    }
    }
    ?>
    `

    Este código primero verifica si la entrada actual en el iterador es un directorio. Si es así, muestra un enlace a ese directorio y verifica si se ha hecho clic en él. Si se ha hecho clic, crea un nuevo FilesystemIterator para ese directorio y muestra sus contenidos como enlaces.

    Si la entrada actual no es un directorio, muestra el enlace de archivo con el atributo “descargar”.

    Tenga en cuenta que este código no maneja subcarpetas dentro de las carpetas. Deberá modificarlo para manejar esos casos si es necesario.

Comments are closed.