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