Moon
Moon

Reputation: 20012

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...

Upvotes: 1

Views: 13372

Answers (10)

mark.inman
mark.inman

Reputation: 2641

I would start off by creating a recursive function:

function recurseDir ($dir) {

    // open the provided directory
    if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].$dir)) {

        // we dont want the directory we are in or the parent directory
        if ($entry !== "." && $entry !== "..") {

            // recursively call the function, if we find a directory
            if (is_dir($_SERVER['DOCUMENT_ROOT'].$dir.$entry)) {

                recurseDir($dir.$entry);
            }
            else {  

                // else we dont find a directory, in which case we have a file                          
                // now we can output anything we want here for each file
                // in your case we want to output all the images with the path under it
                echo "<img src='".$dir.$entry."'>";
                echo "<div><a href='".$dir.$entry."'>".$dir.$entry."</a></div>";
            }
        }
    }
}

The $dir param needs to be in the following format: "/path/" or "/path/to/files/"

Basically, just don't include the server root, because i have already done that below using $_SERVER['DOCUMENT_ROOT'].

So, in the end just call the recurseDir function we just made in your code once, and it will traverse any sub folders and output the image with the link under it.

Upvotes: 0

RJ.
RJ.

Reputation: 342

$dir = "/etc/php5/";

// Open a known directory, and proceed to read its contents

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}

For further reference :http://php.net/manual/en/function.opendir.php

Upvotes: 0

user460064
user460064

Reputation: 89

<?php 
//define directory
$dir = "images/";
//open directory
if ($opendir = opendir($dir)){
//read directory
 while(($file = readdir($opendir))!= FALSE ){
  if($file!="." && $file!= ".."){
   echo "<img src='$dir/$file' width='80' height='90'><br />";
  }
 }
} 
?>

source: phpacademy.org

Upvotes: 5

Jacek Wysocki
Jacek Wysocki

Reputation: 1090

Hi you can use DirectoryIterator

try {
    $dir = './';
    /* @var $Item DirectoryIterator */
    foreach (new DirectoryIterator($dir) as $Item) {
        if($Item->isFile()) {
            echo $Item->getFilename() . "\n";
        }
    }
} catch (Exception $e) {
    echo 'No files Found!<br />';
}

If you want to pass directories recursively: http://php.net/manual/en/class.recursivedirectoryiterator.php

Upvotes: 1

BMBM
BMBM

Reputation: 16013

You could also try the glob function:

$path = '/your/path/';
$pattern = '*.{gif,jpg,jpeg,png}';

$images = glob($path . $pattern, GLOB_BRACE);

print_r($images);

Upvotes: 0

Major Productions
Major Productions

Reputation: 6042

I use something along the lines of:

if ($dir = dir('images'))
{       
    while(false !== ($file = $dir->read()))
    {
        if (!is_dir($file) && $file !== '.' && $file !== '..' && (substr($file, -3) === 'jpg' || substr($file, -3) === 'png' || substr($file, -3) === 'gif'))
        {
            // do stuff with the images
        }
    }
}
else { echo "Could not open directory"; }

Upvotes: 0

symcbean
symcbean

Reputation: 48357

You could as others have suggested check every file in the dir, or you could use glob to identify files based on extension.

Upvotes: 0

Chris
Chris

Reputation: 12078

/**
*  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;
    }

Upvotes: 0

Haim Evgi
Haim Evgi

Reputation: 125496

if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}

use readdir

Upvotes: 10

fredley
fredley

Reputation: 33901

You'll want to use the scandir function to walk the list of files in the directory.

Upvotes: 2

Related Questions