Comment obtenir seulement des images en utilisant scandir en PHP?

est - il possible d'obtenir seulement des images avec des extensions jpeg , png , gif etc en utilisant

$dir    = '/tmp';
$files1 = scandir($dir);
34
demandé sur Madan Sapkota 2010-07-12 11:19:17

6 réponses

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 RegexIterator ou passer le résultat de scandir à array_map et utiliser un callback qui filtre Toutes les extensions indésirables. Que vous utilisiez strpos , fnmatch ou pathinfo pour obtenir l'extension dépend de vous.

77
répondu Gordon 2015-07-24 08:24:55

la vraie question était d'utiliser scandir et les réponses se retrouvent dans glob. Il ya 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 aidera quelqu'un.

26
répondu Rajesh Kumar R 2016-07-06 14:49:08

Je bouclerais les fichiers et regarderais 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;
}
12
répondu Josiah 2016-03-17 21:38:57

voici un moyen simple pour obtenir seulement des images. Fonctionne avec PHP >= 5.2 version. La collection d'extensions sont en minuscules, de sorte que le fait de l'extension de fichier en boucle à minuscules le rendent insensible à la casse.

// 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);

j'espère que c'est utile si vous voulez des extensions insensibles à la casse et à l'image seulement.

10
répondu Madan Sapkota 2015-04-29 15:39:02

vous pouvez rechercher le tableau résultant après et jeter les fichiers ne correspondant pas à vos critères.

scandir n'a pas la fonctionnalité que vous recherchez.

5
répondu Borealid 2010-07-12 07:20:20

si vous souhaitez numériser un répertoire et ne renvoyer que les noms de fichiers, vous pouvez utiliser ceci:

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

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

2
répondu Aaron Olin 2017-11-18 17:17:40