2011-12-16 9 views
21

Duplicar posibles:
PHP list of specific files in a directory
use php scandir($dir) and get only images!mejor manera de conseguir los archivos de un directorio filtrada por cierta extensión en php

Así que ahora tengo un directorio y estoy consiguiendo una lista de archivos

$dir_f = "whatever/random/"; 
$files = scandir($dir_f); 

Eso, sin embargo, recupera todos los archivos en un directorio. ¿Cómo puedo recuperar solo archivos con una cierta extensión como .ini de la manera más eficiente?

+5

No es como un par de docenas pregunta preguntando lo mismo. [Investigue antes de hacer preguntas.] (Http://stackoverflow.com/questions/ask-advice) – Gordon

+0

Use ['scandir'] (http://php.net/manual/en/function.scandir.php) –

+0

'// ruta al directorio para escanear $ directory =" ../ file/";' '// obtener todos los archivos de imagen con una extensión .text' ' $ images = glob ($ directory. "* .texto ");' '// de impresión cada archivo name' ' foreach ($ imágenes '' { '' imagen echo $; '' } $ imagen) como ' –

Respuesta

48

PHP tiene una gran función para ayudarle a capturar sólo los archivos que necesita. Se llama glob()

pegote - Encontrar nombres de ruta coinciden con un patrón de

continuación se muestra un ejemplo de uso -

$files = array(); 
foreach (glob("/path/to/folder/*.txt") as $file) { 
    $files[] = $file; 
} 

Referencia -

+4

por favor no responda duplicados obvios pero cierrevítelos. Gracias. – Gordon

+5

@gor - necesitaba más que solo mi voto para cerrar como [dupe] (http://stackoverflow.com/questions/1646099/scan-current-folder-using-php) ... – Lix

8

PHP glob() función le permite especificar un patrón para buscar.

9

Si desea más de una extensión encontrar, y después preg_grep() es una alternativa para el filtrado:

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

Aunque glob tiene una sintaxis adicional similar. Esto tiene mucho sentido si tiene otras condiciones, agregue el indicador ~i para distinguir entre mayúsculas y minúsculas o puede filtrar listas combinadas.

+2

'glob (" {$ dir} *. {jpg, jpeg, gif, ico, png} ", GLOB_BRACE)'. Esto funcionaría como bueno para múltiples extensiones. –

+0

¡Esta respuesta fue extremadamente útil para mí! Trataba de buscar cientos de identificadores de archivos y archivos diferentes en una carpeta con decenas a cientos de miles de archivos. glob no podía manejar una cadena de búsqueda tan grande, y si rompiera en cadenas más pequeñas y loope d tomó varios minutos. ¡usar preg_grep con scandir toma alrededor de 5 segundos! –

2

glob($pattern, $flags)

<?php 
foreach (glob("*.txt") as $filename) { 
    echo "$filename size " . filesize($filename) . "\n"; 
} 
?> 
0

probar esto

//path to directory to scan 
$directory = "../file/"; 

//get all image files with a .txt extension. 
$file= glob($directory . "*.txt "); 

//print each file name 
foreach($file as $filew) 
{ 
echo $filew; 
$files[] = $filew; // to create the array 

} 
+0

No conozco ningún archivos con una extensión '.text'. –

+1

@MadaraUchiha lo siento, fue un error tipográfico –

0

no han probado la expresión regular, pero algo como esto:

if ($handle = opendir('/file/path')) { 

    while (false !== ($entry = readdir($handle))) { 
     if (preg_match('/\.txt$/', $entry)) { 
      echo "$entry\n"; 
     } 
    } 

    closedir($handle); 
} 
5

puede probar a usar GlobIterator

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME); 
$array = iterator_to_array($iterator); 
var_dump($array) 
Cuestiones relacionadas