txt texto sobreescribir reemplazar mostrar manipulacion manejo leer informatica funciones ficheros ejemplos archivos archivo php list get subdirectory

texto - PHP Obtenga todos los subdirectorios de un directorio determinado



reemplazar archivo php (15)

¿Cómo puedo obtener todos los subdirectorios de un directorio determinado sin archivos,. (directorio actual) o .. (directorio padre) y luego usa cada directorio en una función?


A continuación, le mostramos cómo puede recuperar solo directorios con GLOB:

$directories = glob($somePath . ''/*'' , GLOB_ONLYDIR);


Casi lo mismo que en tu pregunta anterior :

$iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($yourStartingPath), RecursiveIteratorIterator::SELF_FIRST); foreach($iterator as $file) { if($file->isDir()) { echo strtoupper($file->getRealpath()), PHP_EOL; } }

Reemplace strtoupper con su función deseada.


En Array:

function expandDirectoriesMatrix($base_dir, $level = 0) { $directories = array(); foreach(scandir($base_dir) as $file) { if($file == ''.'' || $file == ''..'') continue; $dir = $base_dir.DIRECTORY_SEPARATOR.$file; if(is_dir($dir)) { $directories[]= array( ''level'' => $level ''name'' => $file, ''path'' => $dir, ''children'' => expandDirectoriesMatrix($dir, $level +1) ); } } return $directories; }

//acceso:

$dir = ''/var/www/''; $directories = expandDirectoriesMatrix($dir); echo $directories[0][''level''] // 0 echo $directories[0][''name''] // pathA echo $directories[0][''path''] // /var/www/pathA echo $directories[0][''children''][0][''name''] // subPathA1 echo $directories[0][''children''][0][''level''] // 1 echo $directories[0][''children''][1][''name''] // subPathA2 echo $directories[0][''children''][1][''level''] // 1

Ejemplo para mostrar todo:

function showDirectories($list, $parent = array()) { foreach ($list as $directory){ $parent_name = count($parent) ? " parent: ({$parent[''name'']}" : ''''; $prefix = str_repeat(''-'', $directory[''level'']); echo "$prefix {$directory[''name'']} $parent_name <br/>"; // <----------- if(count($directory[''children''])){ // list the children directories showDirectories($directory[''children''], $directory); } } } showDirectories($directories); // pathA // - subPathA1 (parent: pathA) // -- subsubPathA11 (parent: subPathA1) // - subPathA2 // pathB // pathC


Encuentra todos los archivos PHP recursivamente. La lógica debe ser lo suficientemente simple como para modificarla y pretende ser rápida (er) evitando llamadas a funciones.

function get_all_php_files($directory) { $directory_stack = array($directory); $ignored_filename = array( ''.git'' => true, ''.svn'' => true, ''.hg'' => true, ''index.php'' => true, ); $file_list = array(); while ($directory_stack) { $current_directory = array_shift($directory_stack); $files = scandir($current_directory); foreach ($files as $filename) { // Skip all files/directories with: // - A starting ''.'' // - A starting ''_'' // - Ignore ''index.php'' files $pathname = $current_directory . DIRECTORY_SEPARATOR . $filename; if (isset($filename[0]) && ( $filename[0] === ''.'' || $filename[0] === ''_'' || isset($ignored_filename[$filename]) )) { continue; } else if (is_dir($pathname) === TRUE) { $directory_stack[] = $pathname; } else if (pathinfo($pathname, PATHINFO_EXTENSION) === ''php'') { $file_list[] = $pathname; } } } return $file_list; }


Encuentra todos los archivos y carpetas bajo un directorio específico.

function getAllSubdir($dir, &$fullDir = []) { $currentDir = scandir($dir); foreach ($currentDir as $key => $val) { $realpath = realpath($dir . DIRECTORY_SEPARATOR . $val); if (!is_dir($realpath) && $filename != "." && $filename != "..") { getDirRecursive($realpath, $fullDir); $fullDir[] = $realpath; } } return $fullDir; } var_dump(scanDirAndSubdir(''C:/web2.0/''));

Muestra:

array (size=4) 0 => string ''C:/web2.0/config/'' (length=17) 1 => string ''C:/web2.0/js/'' (length=13) 2 => string ''C:/web2.0/mydir/'' (length=16) 3 => string ''C:/web2.0/myfile/'' (length=17)


Forma apropiada

/** * Get all of the directories within a given directory. * * @param string $directory * @return array */ function directories($directory) { $glob = glob($directory . ''/*''); if($glob === false) { return array(); } return array_filter($glob, function($dir) { return is_dir($dir); }); }

Inspirado por Laravel


He escrito un escáner que funciona muy bien y escanea directorios y subdirectorios en cada directorio y archivos.

function scanner($path){ $result = []; $scan = glob($path . ''/*''); foreach($scan as $item){ if(is_dir($item)) $result[basename($item)] = scanner($item); else $result[] = basename($item); } return $result; }

Ejemplo

var_dump(scanner($path));

devoluciones:

array(6) { ["about"]=> array(2) { ["factory"]=> array(0) { } ["persons"]=> array(0) { } } ["contact"]=> array(0) { } ["home"]=> array(1) { [0]=> string(5) "index.php" } ["projects"]=> array(0) { } ["researches"]=> array(0) { } [0]=> string(5) "index.php" }


La clase Spl DirectoryIterator proporciona una interfaz simple para ver los contenidos de los directorios del sistema de archivos.

$dir = new DirectoryIterator($path); foreach ($dir as $fileinfo) { if ($fileinfo->isDir() && !$fileinfo->isDot()) { echo $fileinfo->getFilename().''<br>''; } }


Para las personas que realmente quieren carpetas y subcarpetas sin archivos, al igual que dijo OP, el siguiente código genera una lista de carpetas y sus subcarpetas, y una matriz de las mismas.

<?php /** * Function for recursive directory file list search as an array. * * @param mixed $dir Main Directory Path. * * @return array */ function listFolderFiles($dir) { $fileInfo = scandir($dir); $allFileLists = []; foreach ($fileInfo as $folder) { if ($folder !== ''.'' && $folder !== ''..'') { if (is_dir($dir . DIRECTORY_SEPARATOR . $folder) === true) { $allFileLists[$folder . ''/''] = listFolderFiles($dir . DIRECTORY_SEPARATOR . $folder); echo '' ''. $folder. '' '' <br>''; } else { echo'' ''; } } } return $allFileLists; }//end listFolderFiles() listFolderFiles(''C:/wamp64/www/code''); $dir = listFolderFiles(''C:/wamp64/www/code''); echo ''<pre>''; print_r($dir); echo ''</pre>'' ?>


Prueba este código:

<?php $path = ''/var/www/html/project/somefolder''; $dirs = array(); // directory handle $dir = dir($path); while (false !== ($entry = $dir->read())) { if ($entry != ''.'' && $entry != ''..'') { if (is_dir($path . ''/'' .$entry)) { $dirs[] = $entry; } } } echo "<pre>"; print_r($dirs); exit;


Puede probar esta función (se requiere PHP 7)

function getDirectories(string $path) : array { $directories = []; $items = scandir($path); foreach ($items as $item) { if($item == ''..'' || $item == ''.'') continue; if(is_dir($path.''/''.$item)) $directories[] = $item; } return $directories; }


Puede usar la función glob () para hacer esto.

Aquí hay un poco de documentación: glob()


Si está buscando una lista recursiva de soluciones de directorio. Use el código siguiente. Espero que lo ayude.

<?php /** * Function for recursive directory file list search as an array. * * @param mixed $dir Main Directory Path. * * @return array */ function listFolderFiles($dir) { $fileInfo = scandir($dir); $allFileLists = []; foreach ($fileInfo as $folder) { if ($folder !== ''.'' && $folder !== ''..'') { if (is_dir($dir . DIRECTORY_SEPARATOR . $folder) === true) { $allFileLists[$folder . ''/''] = listFolderFiles($dir . DIRECTORY_SEPARATOR . $folder); } else { $allFileLists[$folder] = $folder; } } } return $allFileLists; }//end listFolderFiles() $dir = listFolderFiles(''your searching directory path ex:-F:/xampp/htdocs/abc''); echo ''<pre>''; print_r($dir); echo ''</pre>'' ?>


puedes usar glob() con la opción GLOB_ONLYDIR

o

$dirs = array_filter(glob(''*''), ''is_dir''); print_r( $dirs);


<?php /*this will do what you asked for, it only returns the subdirectory names in a given path, and you can make hyperlinks and use them: */ $yourStartingPath = "photos//"; $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($yourStartingPath), RecursiveIteratorIterator::SELF_FIRST); foreach($iterator as $file) { if($file->isDir()) { $path = strtoupper($file->getRealpath()) ; $path2 = PHP_EOL; $path3 = $path.$path2; $result = end(explode(''/'', $path3)); echo "<br />". basename($result ); } } /* best regards, Sanaan Barzinji Erbil */ ?>