Search code examples
phpdirectorytraversalgetfiles

PHP - Code to traverse a directory and get all the files(images)


i want to write a page that will traverse a specified directory.... and get all the files in that directory...

in my case the directory will only contain images and display the images with their links...

something like this

Example

How to Do it

p.s. the directory will not be user input.. it will be same directory always...


Solution

  • /**
    *  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( ' ', ( $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;
        }