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);
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.
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.
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;
}
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.
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.
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