una - ¿Cómo obtener solo imágenes usando Scandir en PHP?
obtener imágenes de una carpeta dinamicamente por php (6)
¿Hay alguna manera de obtener solo imágenes con extensiones jpeg
, png
, gif
, etc. mientras usas
$dir = ''/tmp'';
$files1 = scandir($dir);
Aquí hay una manera simple de obtener solo imágenes. Funciona con PHP> = versión 5.2 . La colección de extensiones está en minúsculas, por lo que la extensión de archivo en bucle a minúsculas lo hace insensible a mayúsculas y minúsculas.
// 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);
Espero que esto sea útil si quieres extensiones insensibles a mayúsculas y minúsculas.
La pregunta real era usar scandir y las respuestas terminan en glob. Hay una gran diferencia en ambos donde la burbuja es considerablemente pesada. El mismo filtro se puede hacer con scandir usando el siguiente código:
$images = preg_grep(''~/.(jpeg|jpg|png)$~'', scandir($dir_f));
Espero que esto ayude a alguien.
Luego puede buscar en la matriz resultante y descartar los archivos que no coinciden con sus criterios.
scandir
no tiene la funcionalidad que buscas.
Me gustaría recorrer los archivos y ver sus extensiones:
$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;
}
Puedes usar glob
$images = glob(''/tmp/*.{jpeg,gif,png}'', GLOB_BRACE);
Si necesita que esto no scandir
entre array_map
y minúsculas, podría usar un DirectoryIterator
en combinación con un RegexIterator
o pasar el resultado de scandir
a array_map
y usar una devolución de llamada que filtre las extensiones no deseadas. Si usted usa strpos
, fnmatch
o pathinfo
para obtener la extensión depende de usted.
Si desea escanear un directorio y devolver solo los nombres de los archivos, puede usar esto:
$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob(''./includes/*.{php}'', GLOB_BRACE)
);
scandir()
regresará .
y ..
al igual que los archivos, por lo que el código anterior es más limpio si solo necesita nombres de archivo o si desea hacer otras cosas con los archivos de acceso reales