it-swarm-pt.tech

Melhor maneira de obter arquivos de um diretório filtrado por determinada extensão no php

Possível duplicado:
PHP lista de arquivos específicos em um diretório
use php scandir ($ dir) e obtenha apenas imagens!

Então, agora eu tenho um diretório e estou recebendo uma lista de arquivos

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

Isso, no entanto, recupera todos os arquivos em um diretório. Como eu recuperaria apenas arquivos com uma certa extensão, como .ini, da maneira mais eficiente.

25
CodeCrack

O PHP tem uma ótima função para ajudá-lo a capturar apenas os arquivos que você precisa. Seu chamado glob()

glob - Localizar nomes de caminho que correspondem a um padrão

Aqui está um exemplo de uso - 

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

Referência - 

60
Lix

Se você quiser mais de uma extensão pesquisada, então preg_grep() é uma alternativa para filtragem:

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

Embora glob tenha uma sintaxe extra semelhante. Isso geralmente faz sentido se você tiver outras condições, adicionar o sinalizador ~i para não diferenciar maiúsculas de minúsculas ou filtrar listas combinadas.

12
mario

PHP glob() function permite especificar um padrão para procurar.

9
Linus Kleen

Você pode tentar usar GlobIterator

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

glob ($ pattern, $ flags)

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

não testei o regex mas algo assim:

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

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

    closedir($handle);
}
1
firecracker

tente isso 

//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
Database_Query