Asked  7 Months ago    Answers:  5   Viewed   42 times

Please give me a solution for listing all the folders,subfolders,files in a directory using php. My folder structure is like this:

Main Dir
 Dir1
  SubDir1
   File1
   File2
  SubDir2
   File3
   File4
 Dir2
  SubDir3
   File5
   File6
  SubDir4
   File7
   File8

I want to get the list of all the files inside each folder.

Is there any shell script command in php?

 Answers

62
function listFolderFiles($dir){
    $ffs = scandir($dir);

    unset($ffs[array_search('.', $ffs, true)]);
    unset($ffs[array_search('..', $ffs, true)]);

    // prevent empty ordered elements
    if (count($ffs) < 1)
        return;

    echo '<ol>';
    foreach($ffs as $ff){
        echo '<li>'.$ff;
        if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
        echo '</li>';
    }
    echo '</ol>';
}

listFolderFiles('Main Dir');
Wednesday, March 31, 2021
 
ajaybc
answered 7 Months ago
89

Use glob :

if (count(glob("path/*")) === 0 ) { // empty

A nice thing about glob is that it doesn't return . and .. directories.

Wednesday, March 31, 2021
 
EastSw
answered 7 Months ago
72
/**
*  function get files 
*  @param $path string = path to fine files in 
*  @param $accept array = array of extensions to accept 
*  @param currentLevel = 0, stopLevel = 0 
*  @return array of madmanFile objects, but you can modify it to 
*  return whatever suits your needs.  
*/

    public static function getFiles( $path = '.', $accept, $currentLevel = 0, $stopLevel = 0){

            $path = trim($path);                    //trim whitespcae if any
            if(substr($path,-1)=='/'){$path = substr($path,0,-1);}  //cutoff the last "/" on path if provided
            $selectedFiles = array();
            try{
                    //ignore these files/folders
                    $ignoreRegexp = "/.(T|t)rash/";
                    $ignore = array( 'cgi-bin', '.', '..', '.svn');
                    $dh = @opendir( $path );
                    //Loop through the directory
                    while( false !== ( $file = readdir( $dh ) ) ){
                            // Check that this file is not to be ignored
                            if( !in_array( $file, $ignore ) and !preg_match($ignoreRegexp,$file)){
                            $spaces = str_repeat( '&nbsp;', ( $currentLevel * 4 ) );
                                    // Its a directory, so we need to keep reading down...
                                    if( is_dir( "$path/$file" ) ){
                                            //merge current selectFiles array with recursion return which is
                                            //another array of selectedFiles
                                            $selectedFiles = array_merge($selectedFiles,MadmanFileManager::getFiles( "$path/$file", $accept, ($currentLe$
                                    } else{
                                            $info = pathinfo($file);
                                            if(in_array($info['extension'], $accept)){
                                                    $selectedFiles[] = new MadmanFile($info['filename'], $info['extension'], MadmanFileManager::getSize($

                                            }//end if in array
                                    }//end if/else is_dir
                            }
                    }//end while
                    closedir( $dh );
                    // Close the directory handle
            }catch (Exception $e){
                    echo 'Caught exception: ',  $e->getMessage(), "n";
            }

            return $selectedFiles;
    }
Wednesday, March 31, 2021
 
aWebDeveloper
answered 7 Months ago
86

You can make use of the SPL iterators. In particular the RecursiveDirectoryIterator which will recursively traverse through a given directory structure.

Like so:

$realpath = realpath('/path/to/file');


$fileObjects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($realpath),
                 RecursiveIteratorIterator::SELF_FIRST);

foreach($fileObjects as $key => $object){
    if($object->getFilename() === 'filename.png') {
        echo $object->getPathname();
    }
}

The SELF_FIRST iteration mode basically tells the iterator that the parent items are to be placed first (parents come first).

Wednesday, March 31, 2021
 
Stefan
answered 7 Months ago
54

Display directories and files on a blank page

// YourPage.aspx
<%@ Import Namespace="System.IO" %>
<html>
<body>
    <% foreach (var dir in new DirectoryInfo("E:\TEMP").GetDirectories()) { %>
        Directory: <%= dir.Name %><br />

        <% foreach (var file in dir.GetFiles()) { %>
            <%= file.Name %><br />
        <% } %>
        <br />
    <% } %>
</body>
</html>
Friday, July 30, 2021
 
Zigglzworth
answered 3 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :