2016-02-05 141 views
1

我有一個代碼在這裏獲取包含子文件夾的文件夾中的所有圖像。我能做些什麼來只從文件夾獲取圖像,而不是子文件夾?PHP:獲取來自文件夾但不是子文件夾的所有圖像

$dirname = "media/images/iconized/"; 
$images = glob($dirname."*.png"); 
foreach($images as $image) { 
echo '<img src="'.$image.'" /><br />'; 
} 
+1

無法從子文件夾獲取圖像 –

+0

如果是子文件夾,它將獲取子文件夾名稱。 (例如:子文件夾名稱:abc,它也會獲取以及其他圖像) –

+2

好了,然後回答,但不應該像文件夾名稱必須是'something.png' –

回答

3
$dirname = "media/images/iconized/"; 
$images = glob($dirname."*.png"); 
foreach($images as $image) { 
    if(!is_dir($image)) 
     echo '<img src="'.$image.'" /><br />'; 
} 
1

我使用的目錄迭代器過濾迭代器取得特定擴展名的文件列表。看看下面的解決方案。您可以使用recursived目錄迭代器遞歸獲取文件。

class FileExtFilter extends FilterIterator 
{ 
    private $fileext; 

    public function __construct(Iterator $iterator, $fileext) 
    { 
     parent::__construct($iterator); 
     $this->fileext = $fileext; 
    } 

    public function accept() 
    { 
     $file = $this->getInnerIterator()->current(); 
     return preg_match("/\.({$this->fileext})$/", $file); 
    } 
} 
function getFilteredFileList($dir, $ext) 
{ 
    $retval = array(); 

    // add trailing slash if missing 
    if(substr($dir, -1) != "/") $dir .= "/"; 

    // open directory for reading 
    $d = new DirectoryIterator($dir) or die("getFilteredFileList: Failed opening directory $dir for reading"); 
    $iterator = new FileExtFilter($d, $ext); 
    foreach($iterator as $fileinfo) { 

     if($fileinfo->isDot()) continue; 
     $retval[] = array(
      'name' => "{$dir}{$fileinfo}", 
      'type' => ($fileinfo->getType() == "dir") ? "dir" : mime_content_type($fileinfo->getRealPath()), 
      'size' => $fileinfo->getSize(), 
      'lastmod' => $fileinfo->getMTime() 
     ); 
    } 

    return $retval; 
} 

$list = getFilteredFileList('directorypath', 'png|jpeg|pdf'); 

print_r($list); 
相關問題