2010-08-31 113 views
0

我想写一个网页,会遍历一个指定的目录....并获得在该目录中的所有文件...PHP - 代码遍历目录,并获得所有文件(影像)

在我的情况下,该目录将只包含图像,并与他们的链接显示图片...

像这样

Example

怎么办呢

p.s.该目录将不会被用户输入..它将始终是相同的目录...

+1

可能的[从文件夹加载图像列表](http://stackoverflow.com/questions/758594/load-list-of-image-from-folder)和[更多](http:// stackoverflow .com/search?q = get + all + images + in + a + folder + php) – Gordon 2010-08-31 11:06:37

+1

*(相关)* http://stackoverflow.com/questions/3563863/read-files-in-folder/3564311#3564311 – Gordon 2010-08-31 11:50:13

回答

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(' ', ($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

太可怕了。看看迭代器和SplFileInfo – Gordon 2010-08-31 11:08:51

+0

我也有同样的功能以这种方式实现... – Chris 2010-08-31 12:10:25

2

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

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

使用readdir

+1

+1,为答案。 – 2013-09-21 08:19:06

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

0

你可以像其他人建议检查目录中的每个文件,或者你可以使用glob来识别基于扩展名的文件。

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

你也可以尝试glob功能:

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

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

print_r($images); 
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
<?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 />"; 
    } 
} 
} 
?> 

来源:

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需要在以下格式: “/路径/” phpacademy.org

0

我将通过创建一个递归函数开始或“/ path/to/files /”

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

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