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

陌路散爱 提交于 2019-12-04 06:17:23

问题


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

How to Do it

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


回答1:


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



回答2:


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

use readdir




回答3:


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




回答4:


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




回答5:


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




回答6:


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




回答7:


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"; }



回答8:


You could also try the glob function:

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

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

print_r($images);



回答9:


$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




回答10:


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.



来源:https://stackoverflow.com/questions/3608202/php-code-to-traverse-a-directory-and-get-all-the-filesimages

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!