web-dev-qa-db-fra.com

Comment obtenir uniquement des images en utilisant scandir en PHP?

Existe-t-il un moyen d'obtenir uniquement des images avec les extensions jpeg, png, gif etc lors de l'utilisation

$dir    = '/tmp';
$files1 = scandir($dir);
39
esafwan

Vous pouvez utiliser glob

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

Si vous avez besoin que cela soit insensible à la casse, vous pouvez utiliser un DirectoryIterator en combinaison avec un RegexIterator ou passage le résultat de scandir à array_map et utilisez un rappel qui filtre toutes les extensions indésirables. Que vous utilisiez strpos, fnmatch ou pathinfo pour obtenir l'extension dépend de vous.

86
Gordon

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

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

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

33
Rajesh Kumar R

Je parcourais les fichiers et regardais 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;
}
14
Josiah

Voici un moyen simple d'obtenir uniquement des images. Fonctionne avec PHP> = 5.2 version. La collection d'extensions est en minuscules, donc rendre l'extension de fichier en boucle en minuscules la rend 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 cela sera utile si vous voulez des extensions insensibles à la casse et uniquement à l'image.

10
Madan Sapkota

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

scandir n'a pas les fonctionnalités que vous recherchez.

6
Borealid

Si vous souhaitez analyser un répertoire et renvoyer des noms de fichiers uniquement, vous pouvez utiliser ceci:

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

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

2
Aaron Olin