2010-07-12 8 views

risposta

73

È possibile utilizzare glob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE); 

Se avete bisogno di questo per essere tra maiuscole e minuscole, è possibile utilizzare una DirectoryIterator in combinazione con un RegexIteratoro passare il risultato di scandir-array_map e utilizzare un callback che filtra eventuali estensioni indesiderate. Se si utilizza strpos, fnmatch o pathinfo per ottenere l'estensione dipende da voi.

+5

Che ... non usa più 'scandir()'. Ma è altrimenti corretto. Quindi non dovrebbe essere "no, con' glob' "? – Borealid

+0

@ nitpicker borealid: D – Gordon

+2

Ora rendi il case insensibile. > :) – salathe

5

È possibile cercare la matrice risultante in seguito ed eliminare file non corrispondente ai criteri.

scandir non ha la funzionalità che si cerca.

12

lo farei scorrere i file e guardare le loro estensioni:

$dir = '/tmp'; 
$dh = opendir($dir); 
while (false !== ($fileName = readdir($dh))) { 
    $ext = substr($fileName, strrpos($fileName, '.') + 1); 
    if(in_array($ext, array("jpg","jpeg","png","gif"))) 
     $files1[] = $fileName; 
} 
10

Ecco un modo semplice per ottenere solo immagini. Funziona con la versione PHP> = 5.2. La collezione di estensioni è in minuscolo, quindi rendere l'estensione del file in loop in minuscolo renderla non sensibile al maiuscolo/minuscolo.

// image extensions 
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); 

// init result 
$result = array(); 

// directory to scan 
$directory = new DirectoryIterator('/dir/to/scan/'); 

// iterate 
foreach ($directory as $fileinfo) { 
    // must be a file 
    if ($fileinfo->isFile()) { 
     // file extension 
     $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); 
     // check if extension match 
     if (in_array($extension, $extensions)) { 
      // add to result 
      $result[] = $fileinfo->getFilename(); 
     } 
    } 
} 
// print result 
print_r($result); 

Spero che questo sia utile se si desidera che le estensioni non siano sensibili alla distinzione tra maiuscole e minuscole.

+0

Funziona perfettamente! –

16

La domanda vera stava usando scandir e le risposte finiscono in glob. C'è un'enorme differenza in entrambi i casi in cui Blob considerevolmente pesante. Lo stesso filtraggio può essere fatto con scandir usando il seguente codice:

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

Spero che questo possa aiutare qualcuno.

1

Se si desidera eseguire la scansione di una directory e restituire i nomi di file solo è possibile utilizzare questo:

$fileNames = array_map(
    function($filePath) { 
     return basename($filePath); 
    }, 
    glob('./includes/*.{php}', GLOB_BRACE) 
); 

scandir() sarà tornare . e .. così come i file, in modo che il codice di cui sopra è più pulita se avete solo bisogno nomi di file o ti piacerebbe fare altre cose con i percorsi di file effettivi

+0

grazie. –

Problemi correlati