una subdirectorios only mostrar listar files directorios descargar carpeta archivos php directory

subdirectorios - readdir php



Usar scandir() para buscar carpetas en un directorio(PHP) (8)

En primer lugar, rmdir () no puede eliminar una carpeta con contenido. Si el modo seguro está deshabilitado, puede usar lo siguiente.

exec("rm -rf folder/");

También mire is_dir () / is_file () o incluso mejor SPL de PHP .

Estoy usando esta porción de código:

$target = ''extracted/'' . $name[0]; $scan = scandir($target);

Para escanear el directorio de una carpeta que se utiliza para cargas zip. Quiero poder encontrar todas las carpetas dentro de mi carpeta $target para poder eliminarlas y sus contenidos, dejando solo los archivos en el directorio $target .

Una vez que haya devuelto el contenido de la carpeta, no sé cómo diferenciar las carpetas y los archivos para poder eliminar las carpetas.

Además, me han dicho que la función rmdir() no puede eliminar las carpetas que tienen contenido dentro de ellas, ¿hay alguna forma de evitar esto?

Gracias, Ben.


Es mejor usar DirectoryIterator

$path = ''extracted''; // ''.'' for current foreach (new DirectoryIterator($path) as $file) { if ($file->isDot()) continue; if ($file->isDir()) { print $file->getFilename() . ''<br />''; } }


La forma rápida y sucia:

$folders = glob("<path>/*", GLOB_ONLYDIR);

Una solución más versátil y orientada a objetos, inspirada en respuestas anteriores utilizando DirectoryIterator pero un poco más concisa y de propósito general:

$path = ''<path>''; $folders = []; foreach (new /DirectoryIterator($path) as $file) { if (!$file->isDot() && $file->isDir()) { $folders[] = $file; } }


Para determinar si tiene o no una carpeta o un archivo, use las funciones is_dir() y is_file()

Por ejemplo:

$path = ''extracted/'' . $name[0]; $results = scandir($path); foreach ($results as $result) { if ($result === ''.'' or $result === ''..'') continue; if (is_dir($path . ''/'' . $result)) { //code to use if directory } }


También quería eliminar elementos si estaban dentro de ese directorio. rmdir no le permite eliminar directorios que contienen archivos. Pero hay una solución simple.

array_map(''unlink'', glob($target.''/*/*'')); array_map(''rmdir'',glob($target."/*",GLOB_ONLYDIR));

Primero desvinculará todos los archivos en todos los subdirectorios.
En segundo lugar, eliminará todos los directorios, ya que no contienen archivos.

Si tienes sub-subdirectorios, entonces deberías agregar otras 2 líneas como esta:

array_map(''unlink'', glob($target.''/*/*/*'')); //remove sub-sub-files array_map(''rmdir'',glob($target."/*/*",GLOB_ONLYDIR)); //remove sub-sub-directories array_map(''unlink'', glob($target.''/*/*'')); //remove sub-files array_map(''rmdir'',glob($target."/*",GLOB_ONLYDIR)); //remove sub-directories


scandir escaneará todo el directorio, puede filtrar manualmente.

pero si eres perezoso como soy, entonces usa glob

$scan = glob($target."/*",GLOB_ONLYDIR);

y generará una matriz de todos sus directorios de su objetivo.


Para obtener todos los archivos en todas las sub carpetas secundarias

function myfunction($dir){ foreach ($dir as $dirname => $file) { if(is_dir($file) && $file != ''.'' && $file != ''..'' ) { // echo $file; $newDir = scandir($file); myfunction($newDir); }elseif($file !=''.'' && $file != ''..''){ echo "<br>File name is ---"; echo $file; } } // end foreach } //function ends $dirpass = scandir($mypath3); // set directory echo myfunction($dirpass); // pass directory

Obtendremos el resultado como a continuación (por favor, ignore los nombres de los archivos)

File name is ----->index.PHP File name is -----> 100000045 Invoices Sales Magento Admin.png File name is -----> 100000142 Orders Sales Magento Admin(1).png File name is -----> 100000142 Orders Sales Magento Admin.png File name is ----->hrc-siberian-tiger-2-jpg_21253111.jpg File name is ----->images (3rd copy).jpeg File name is ----->images (4th copy).jpeg File name is ----->images (5th copy).jpeg File name is ----->images (another copy).jpeg File name is ----->images (copy).jpeg File name is ----->images.jpeg File name is ----->JPEG_example_JPG_RIP_100.jpg File name is ----->preload File name is ----->Stonehenge (3rd copy).jpg File name is ----->Stonehenge (4th copy).jpg File name is ----->Stonehenge (5th copy).jpg File name is ----->Stonehenge (another copy).jpg File name is ----->Stonehenge (copy).jpg File name is ----->Stonehenge.jpg


$directories = scandir(''images''); foreach($directories as $directory){ if($directory==''.'' or $directory==''..'' ){ echo ''dot''; }else{ if(is_dir($directory)){ echo $directory .''<br />''; } } }

una versión más simple y quizás más rápida