2010-08-31 114 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函數一次,它將遍歷任何子文件夾並將圖像與其下的鏈接一起輸出。