2014-07-27 50 views
3

我目前正在嘗試製作一個腳本,該腳本將在目錄和子目錄中查找帶* .jpg/* .png擴展名的圖像。以遞歸方式查找帶有特定擴展名的圖像

如果找到一些帶有其中一個擴展名的圖片,那麼將其保存到具有路徑,名稱,大小,高度和寬度的數組中。

到目前爲止,我有這段代碼,它會找到所有文件,但我不知道如何獲得只有JPG/PNG圖像。

class ImageCheck { 

public static function getDirectory($path = '.', $level = 0){ 

    $ignore = array('cgi-bin', '.', '..'); 
    // Directories to ignore when listing output. 

    $dh = @opendir($path); 
    // Open the directory to the handle $dh 

    while(false !== ($file = readdir($dh))){ 
    // Loop through the directory 

     if(!in_array($file, $ignore)){ 
     // Check that this file is not to be ignored 

      $spaces = str_repeat(' ', ($level * 4)); 
      // Just to add spacing to the list, to better 
      // show the directory tree. 

      if(is_dir("$path/$file")){ 
      // Its a directory, so we need to keep reading down... 

       echo "<strong>$spaces $file</strong><br />"; 
       ImageCheck::getDirectory("$path/$file", ($level+1)); 
       // Re-call this same function but on a new directory. 
       // this is what makes function recursive. 

      } else { 

       echo "$spaces $file<br />"; 
       // Just print out the filename 

      } 

     } 

    } 

    closedir($dh); 
    // Close the directory handle 

} 
} 

我調用這個函數在我的模板,這樣

ImageCheck::getDirectory($dir); 

回答

6

節省很多頭痛的,只是使用PHP的內置有一個正則表達式表達遞歸搜索:

<?php 

$Directory = new RecursiveDirectoryIterator('path/to/project/'); 
$Iterator = new RecursiveIteratorIterator($Directory); 
$Regex = new RegexIterator($Iterator, '/^.+(.jpe?g|.png)$/i', RecursiveRegexIterator::GET_MATCH); 

?> 

萬一你不熟悉處理對象,下面是如何迭代響應:

<?php 
foreach($Regex as $name => $Regex){ 
    echo "$name\n"; 
} 
?> 
+2

我可能會將正則表達式調整爲'/^.+ \(。jpe?g | .png)$/i'',但使用SPL時爲+1 –

+0

謝謝,我會試試看。 :) – George

相關問題