PHP - 遍历目录并获取所有文件(图像)的代码

时间:2010-08-31 10:40:11

标签: php directory traversal getfiles

我想编写一个遍历指定目录的页面....并获取该目录中的所有文件......

在我的情况下,该目录将只包含图像并显示带有链接的图像......

类似这样的事情

Example

如何操作

P.S。该目录将不是用户输入..它将始终是相同的目录...

10 个答案:

答案 0 :(得分:9)

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

使用readdir

答案 1 :(得分:4)

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

来源:phpacademy.org

答案 2 :(得分:2)

您需要使用scandir函数来遍历目录中的文件列表。

答案 3 :(得分:1)

您好,您可以使用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 />';
}

如果要以递归方式传递目录: http://php.net/manual/en/class.recursivedirectoryiterator.php

答案 4 :(得分:0)

$dir = "/etc/php5/";

//打开一个已知目录,然后继续阅读其内容

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

供进一步参考:http://php.net/manual/en/function.opendir.php

答案 5 :(得分:0)

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

答案 6 :(得分:0)

您可以像其他人一样建议检查目录中的每个文件,或者您可以使用glob根据扩展名识别文件。

答案 7 :(得分:0)

我使用了以下内容:

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 :(得分:0)

您也可以尝试glob功能:

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

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

print_r($images);

答案 9 :(得分:0)

我首先要创建一个递归函数:

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

$ dir param需要采用以下格式: “/ path /”或“/ path / to / files /”

基本上,只是不包括服务器root,因为我已经使用$ _SERVER ['DOCUMENT_ROOT']在下面完成了。

因此,最后只需调用我们刚刚在代码中创建的recurseDir函数,它将遍历任何子文件夹并输出带有其下链接的图像。