Pregunta

Estoy tratando de devolver los archivos en un directorio especificado mediante una búsqueda recursiva. He logrado con éxito esto, sin embargo, quiero añadir unas pocas líneas de código que permitan a mí especificar ciertas extensiones que quiero ser devueltos.

Por ejemplo devolver sólo los archivos .jpg en el directorio.

Aquí está mi código,

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> \n";
}
?>

Por favor, hágamelo saber lo que puedo agregar al código de arriba para lograr esto, gracias

¿Fue útil?

Solución

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$display = Array ( 'jpeg', 'jpg' );
foreach(new RecursiveIteratorIterator($it) as $file)
{
    if (in_array(strtolower(array_pop(explode('.', $file))), $display))
        echo $file . "<br/> \n";
}
?>

Otros consejos

Debe crear un filtro:

class JpegOnlyFilter extends RecursiveFilterIterator
{
    public function __construct($iterator)
    {
        parent::__construct($iterator);
    }

    public function accept()
    {
        return $this->current()->isFile() && preg_match("/\.jpe?g$/ui", $this->getFilename());
    }

    public function __toString()
    {
        return $this->current()->getFilename();
    }
}

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$it = new JpegOnlyFilter($it);
$it = new RecursiveIteratorIterator($it);

foreach ($it as $file)
    ...

Prueba de esto, se utiliza una matriz de tipos de archivo permitidos y sólo ecos a cabo el archivo si existe la extensión del archivo dentro de la matriz.

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$allowed=array("pdf","txt");
foreach(new RecursiveIteratorIterator($it) as $file) {
    if(in_array(substr($file, strrpos($file, '.') + 1),$allowed)) {
        echo $file . "<br/> \n";
    }
}
?>

También puede encontrar que usted podría pasar una matriz de tipos de archivo permitidos a la clase RecursiveDirectoryIterator y sólo devolver los archivos que coinciden.

Dejado PHP hacer el trabajo:

$directory = new RecursiveDirectoryIterator('path/to/directory/');
$iterator  = new RecursiveIteratorIterator($directory);
$regex     = new RegexIterator($iterator, '/\.jpe?g$/i', RecursiveRegexIterator::GET_MATCH);

echo '<pre>';
print_r($regex);

En cuanto a la parte superior votó respuesta: He creado este código que está utilizando un menor número de funciones, sólo el 3, isset(), array_flip(), explode() en lugar de 4 funciones. Probé el más votadas respuesta y que era más lento que el mío. Yo sugiero mina de dar una oportunidad:

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
    $FILE = array_flip(explode('.', $file));
    if (isset($FILE['php']) || isset($FILE['jpg'])) {
        echo  $file. "<br />";
    }
}

Es posible que desee echa un vistazo a esta página usando glob () para una búsqueda similar:

http://www.electrictoolbox.com/php-glob-find-files /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top