Frage

Ich versuche, die Dateien in einem bestimmten Verzeichnis mit einer rekursiven Suche zurückzukehren. Ich dies erfolgreich erreicht, aber ich ein paar Zeilen Code hinzufügen möchten, die mir bestimmte Erweiterungen angeben können, die ich zurück wollen.

Zum Beispiel gibt nur JPG-Dateien im Verzeichnis.

Hier ist mein Code,

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

Bitte lassen Sie mich wissen, was ich zu dem obigen Code hinzufügen können, um dies zu erreichen, dank

War es hilfreich?

Lösung

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

Andere Tipps

Sie sollten einen Filter erstellen:

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

Versuchen Sie dies, verwendet es eine Reihe von erlaubten Dateitypen und nur echos aus der Datei, wenn die Dateierweiterung innerhalb des Arrays vorhanden ist.

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

Sie können auch feststellen, dass Sie eine Reihe von erlaubten Dateitypen Ihrer RecursiveDirectoryIterator Klasse übergeben konnten und nur Dateien zurück, die entspricht.

Lassen Sie PHP die Arbeit machen:

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

Im Hinblick auf die oben Antwort gestimmt: Ich habe diesen Code erstellt, die weniger Funktionen verwendet, nur 3, isset(), array_flip(), explode() statt 4 Funktionen. Getestet habe ich die oben gestimmt Antwort und es war langsamer als meine. Ich schlage vor, Mine einen Versuch:

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

Sie können diese Seite über die Verwendung von glob () für eine ähnliche Suche prüfen wollen:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top