2011-12-16 20 views
21

Eventuali duplicati:
PHP list of specific files in a directory
use php scandir($dir) and get only images!modo migliore per ottenere i file da una directory filtrata da determinata estensione in php

Così adesso ho una directory e sto ottenendo un elenco di file

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

Questo, tuttavia, recupera tutti i file in una directory. Come posso recuperare solo i file con una certa estensione come .ini nel modo più efficiente.

+5

C'è come un paio di dozzine di domanda chiedendo lo stesso. [Si prega di fare ricerche prima di fare domande.] (Http://stackoverflow.com/questions/ask-advice) – Gordon

+0

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

+0

'// percorso alla directory da scansionare $ directory =" ../ file/";' '// richiama tutti i file immagine con estensione .text. ' $ images = glob ($ directory. "* .testo ");' ' // stampa ogni file name' ' foreach ($ immagini $ image) '' { '' $ image echo; '' } come ' –

risposta

48

PHP ha una grande funzione per aiutarvi a catturare solo i file necessari. La sua chiamata glob()

glob - Trova percorsi corrispondenti ad un modello

Ecco un esempio di utilizzo -

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

Riferimento -

+4

si prega di non rispondere a duplicati evidenti ma di non tenerli a distanza. Grazie. – Gordon

+5

@gor - serve più del mio voto per chiudere come [dupe] (http://stackoverflow.com/questions/1646099/scan-current-folder-using-php) ... – Lix

8

La funzione glob() di PHP consente di specificare un modello da cercare.

9

Se si desidera più di un'estensione cercato, quindi preg_grep() è un'alternativa per il filtraggio:

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

Anche se glob ha una sintassi più simile. Questo ha più senso se si hanno ulteriori condizioni, aggiungere il flag ~i per la distinzione tra maiuscole e minuscole o filtrare gli elenchi combinati.

+2

'glob (" {$ dir} *. {jpg, jpeg, gif, ico, png} ", GLOB_BRACE)'. Funzionerebbe come bene per più estensioni –

+0

Questa risposta è stata estremamente utile per me! Stavo cercando di cercare centinaia di diversi file identificativi e file in una cartella con decine di centinaia di migliaia di file. Glob non poteva gestire una stringa di ricerca così grande, e se mi fossi intrufolato in corde più piccole e loope d ci sono voluti diversi minuti. usare preg_grep con scandir richiede circa 5 secondi! –

2

glob($pattern, $flags)

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

provare questo

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

Non ne conosco file con estensione '.text'. –

+1

@MadaraUchiha scusa è stato un refuso –

0

non hanno testato l'espressione regolare, ma qualcosa di simile:

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

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

    closedir($handle); 
} 
5

Si può provare a utilizzare GlobIterator

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