utilizando una solo ruta por only obtener nombre mostrar listar listado imágenes imagenes funcion files directorio dinamicamente desde descargar con carpeta buscar archivos php directory-structure file-extension scandir image-file

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