web-dev-qa-db-fra.com

Le meilleur moyen d'obtenir des fichiers d'un répertoire filtré par une certaine extension en php

Dupliquer possible:
PHP liste de fichiers spécifiques dans un répertoire
utilisez php scandir ($ dir) et obtenez uniquement des images!

Donc maintenant j'ai un répertoire et je reçois une liste de fichiers

$dir_f = "whatever/random/";
$files = scandir($dir_f);

Cela, cependant, récupère chaque fichier dans un répertoire. Comment puis-je récupérer uniquement les fichiers portant une certaine extension, tels que .ini, de la manière la plus efficace possible?.

25
CodeCrack

PHP a une fonction intéressante pour vous aider à capturer uniquement les fichiers dont vous avez besoin. Son appelé glob()

glob - Trouver des chemins correspondant à un motif

Voici un exemple d'utilisation - 

$files = array();
foreach (glob("/path/to/folder/*.txt") as $file) {
  $files[] = $file;
}

Référence - 

60
Lix

Si vous souhaitez effectuer plusieurs recherches sur une extension, alors preg_grep() constitue une alternative pour le filtrage:

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

Bien que glob ait une syntaxe supplémentaire similaire. Cela est généralement utile si vous avez d'autres conditions, ajoutez l'indicateur ~i pour tenir compte de la casse ou pouvez filtrer les listes combinées.

12
mario

La fonction glob() de PHP vous permet de spécifier un modèle à rechercher.

9
Linus Kleen

Vous pouvez essayer d'utiliser GlobIterator

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array)
5
Baba

glob ($ pattern, $ flags)

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>
2

n'a pas testé la regex mais quelque chose comme ça:

if ($handle = opendir('/file/path')) {

    while (false !== ($entry = readdir($handle))) {
        if (preg_match('/\.txt$/', $entry)) {
            echo "$entry\n";
        }
    }

    closedir($handle);
}
1
firecracker

essaye ça 

//path to directory to scan
$directory = "../file/";

//get all image files with a .txt extension.
$file= glob($directory . "*.txt ");

//print each file name
foreach($file as $filew)
{
echo $filew;
$files[] = $filew; // to create the array

}
0
Database_Query