Domanda

Sto cercando di restituire i file in una directory specificata utilizzando una ricerca ricorsiva. Ho raggiunto con successo questo, però voglio aggiungere un paio di righe di codice che mi permetterà di specificare determinate estensioni che voglio essere restituito.

Per esempio restituire solo .jpg file nella directory.

Ecco il mio codice,

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

fatemelo sapere che cosa posso aggiungere al codice di cui sopra per raggiungere questo obiettivo, grazie

È stato utile?

Soluzione

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

Altri suggerimenti

Si dovrebbe creare 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)
    ...

Prova questo, utilizza una serie di tipi di file consentiti e solo echi fuori il file se l'estensione del file esiste all'interno della matrice.

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

Si può anche trovare che si potrebbe passare un array di tipi di file consentiti per la classe RecursiveDirectoryIterator e restituire solo i file che corrispondono.

Lasciate PHP fare il lavoro:

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

Per quanto riguarda la parte superiore risposta votato: Ho creato questo codice che utilizza un minor numero di funzioni, solo 3, isset(), array_flip(), explode() invece di 4 funzioni. Ho testato la parte superiore ha votato risposta ed è stato più lento del mio. Suggerisco dando la mia una prova:

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

Si potrebbe voler controllare questa pagina sull'utilizzo glob () per una ricerca simile:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top