2010-07-12 2 views

Antwort

73

können Sie verwenden glob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE); 

Wenn Sie diese Groß- und Kleinschreibung sein, können Sie eine DirectoryIterator in Kombination mit einem verwenden könnte RegexIteratoroder das Ergebnis scandir-array_map passieren und einen Rückruf verwenden, die filtert alle unerwünschten Erweiterungen. Ob Sie strpos, fnmatch oder pathinfo verwenden, um die Erweiterung zu erhalten, liegt bei Ihnen.

+5

Das ... verwendet nicht mehr 'scandir()'. Aber ist sonst richtig. Also sollte das nicht "nein, mit' glob "sein? – Borealid

+0

@Borealid nitpicker: D – Gordon

+2

Jetzt machen Sie es case insensitive. > :) – salathe

5

Verwendung Sie können die resultierende Anordnung danach suchen und Dateien verwerfen nicht Ihren Kriterien übereinstimmen.

scandir hat nicht die Funktionalität, die Sie suchen.

12

würde ich Schleife durch die Dateien und schauen auf ihre Erweiterungen:

$dir = '/tmp'; 
$dh = opendir($dir); 
while (false !== ($fileName = readdir($dh))) { 
    $ext = substr($fileName, strrpos($fileName, '.') + 1); 
    if(in_array($ext, array("jpg","jpeg","png","gif"))) 
     $files1[] = $fileName; 
} 
10

Hier ist eine einfache Art und Weise ist nur Bilder zu bekommen. Funktioniert mit PHP> = 5.2 Version. Die Auflistung der Erweiterungen erfolgt in Kleinbuchstaben. Wenn Sie also die Dateierweiterung in der Schleife in Kleinbuchstaben umwandeln, wird die Groß-/Kleinschreibung ignoriert.

// image extensions 
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); 

// init result 
$result = array(); 

// directory to scan 
$directory = new DirectoryIterator('/dir/to/scan/'); 

// iterate 
foreach ($directory as $fileinfo) { 
    // must be a file 
    if ($fileinfo->isFile()) { 
     // file extension 
     $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); 
     // check if extension match 
     if (in_array($extension, $extensions)) { 
      // add to result 
      $result[] = $fileinfo->getFilename(); 
     } 
    } 
} 
// print result 
print_r($result); 

Ich hoffe, das ist nützlich, wenn Sie Groß- und Kleinschreibung und nur Bild-Erweiterungen möchten.

+0

Funktioniert perfekt! –

16

Die eigentliche Frage war mit scandir und die Antworten enden in glob. Es gibt einen großen Unterschied in beiden, wo Blob erheblich schwerer ist. Die gleiche Filterung kann mit scandir unter Verwendung des folgenden Codes durchgeführt werden:

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f)); 

Ich hoffe, das würde jemandem helfen.

1

Wenn Sie ein Verzeichnis durchsuchen möchten und das Rückdateinamen können nur Sie verwenden:

$fileNames = array_map(
    function($filePath) { 
     return basename($filePath); 
    }, 
    glob('./includes/*.{php}', GLOB_BRACE) 
); 

scandir() kehrt . und .. sowie die Dateien, so dass der obige Code ist sauberer, wenn Sie gerade brauchen Dateinamen oder Sie möchten andere Dinge mit den tatsächlichen Dateipfaden tun

+0

danke. Es hilft –