Pergunta

Eu estou tentando retornar os arquivos em um diretório especificado usando uma pesquisa recursiva. Eu consegui isso com sucesso, no entanto gostaria de acrescentar algumas linhas de código que me permite especificar certas extensões que eu quero ser devolvido.

Por exemplo retorno somente arquivos .jpg no diretório.

Aqui está o meu código,

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

Por favor, deixe-me saber o que eu posso acrescentar ao código acima para alcançar este objectivo, graças

Foi útil?

Solução

<?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";
}
?>

Outras dicas

Você deve criar um 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)
    ...

Tente isto, ele usa uma variedade de tipos de arquivos permitidos e apenas ecos fora o arquivo, se a extensão do arquivo existe dentro da 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";
    }
}
?>

Você também pode achar que você poderia passar uma variedade de tipos de arquivos permitidos para sua classe RecursiveDirectoryIterator e retornar apenas arquivos que jogo.

Let PHP fazer o trabalho:

$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);

Quanto ao mais votados resposta: Eu criei este código que está usando menos funções, apenas 3, isset(), array_flip(), explode() em vez de 4 funções. Eu testei o topo votou resposta e foi mais lento do que o meu. Eu sugiro dar o meu uma tentativa:

$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 />";
    }
}

Você pode querer verificar para fora desta página sobre o uso de glob () para uma pesquisa semelhante:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top