2010-07-12 16 views

Répondre

73

Vous pouvez utiliser glob

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

Si vous avez besoin que ce soit insensible à la casse, vous pouvez utiliser un DirectoryIterator en combinaison avec un RegexIteratorou passer le résultat de scandir-array_map et d'utiliser un rappel qui filtre les extensions indésirables. Si vous utilisez strpos, fnmatch ou pathinfo pour obtenir l'extension est à vous.

+5

Cela ... ne plus utiliser 'scandir()'. Mais est par ailleurs correct. Donc, ne devrait-il pas être "non, avec' glob' "? – Borealid

+0

@Bitealid nitpicker: D – Gordon

+2

Maintenant, faites-le insensible à la casse. > :) – salathe

5

Vous pouvez rechercher le tableau résultant ensuite et jeter les fichiers qui ne correspondent pas à vos critères.

scandir ne possède pas les fonctionnalités que vous recherchez.

12

Je voudrais boucle à travers les fichiers et regarder leurs extensions:

$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

Voici un moyen simple d'obtenir que des images. Fonctionne avec PHP> = 5.2 version. La collection d'extensions est en minuscules, ce qui fait que l'extension de fichier en boucle en minuscules la rend insensible à la casse. J'espère que cela sera utile si vous voulez des extensions insensibles à la casse et à l'image uniquement.

+0

Fonctionne parfaitement! –

16

La véritable question était d'utiliser scandir et les réponses se retrouvent dans glob. Il y a une énorme différence dans les deux où blob considérablement lourd. Le même filtrage peut être fait avec scandir en utilisant le code suivant:

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

J'espère que cela aiderait quelqu'un.

1

Si vous souhaitez numériser un répertoire et retourner les noms de fichiers que vous pouvez utiliser ceci:

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

scandir() renverra . et .. ainsi que les fichiers, de sorte que le code ci-dessus est plus propre si vous avez juste besoin noms de fichiers ou vous voulez faire d'autres choses avec les chemins de fichiers réels

+0

merci, ça aide –