Question

Je suis en train de retourner les fichiers dans un répertoire spécifié en utilisant une recherche récursive. Je cela, mais je veux avec succès accompli ajouter quelques lignes de code qui me permettra de préciser certaines extensions que je veux retourner.

Par exemple retourner uniquement les fichiers .jpg dans le répertoire.

Voici mon code,

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

S'il vous plaît laissez-moi savoir ce que je peux ajouter au code ci-dessus pour y parvenir, merci

Était-ce utile?

La solution

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

Autres conseils

Vous devez créer un filtre:

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)
    ...

Essayez cela, il utilise un tableau de types de fichiers autorisés et ne echos le fichier si l'extension de fichier existe dans le tableau.

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

Vous pouvez également constater que vous pouvez fournir un tableau de types de fichiers autorisés à votre classe RecursiveDirectoryIterator et seulement les fichiers correspondant.

Que PHP faire le travail:

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

En ce qui concerne la réponse voté en haut: j'ai créé ce code qui utilise moins de fonctions, seulement 3, isset(), array_flip(), explode() au lieu de 4 fonctions. Je l'ai testé le haut voté réponse et il a été plus lente que la mienne. Je suggère à moi de donner un essai:

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

Vous pouvez consulter cette page sur l'utilisation glob () pour une recherche similaire:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top