Größen und Dateityp gefilterte Dateiliste mit dem RecursiveDirectoryIterator, dem RegexIterator und einem eigenen FilterIterator (SizeFilterIterator)

Flattr this
Tweet this: Größen und Dateityp gefilterte Dateiliste mit dem RecursiveDirectoryIterator, dem RegexIterator und einem eigenen FilterIterator (SizeFilterIterator)
Dent this: Größen und Dateityp gefilterte Dateiliste mit dem RecursiveDirectoryIterator, dem RegexIterator und einem eigenen FilterIterator (SizeFilterIterator)
Dieser Codeschnipsel zeigt die verwendung eines selbst geschriebenen FilterIterators, dem mySizeFilterIterator der Dateien nach ihrer Größe filtert.
Ausserdem kommt danach noch der RegexFilter (auch ein FilterIterator, aber Bestandteil der SPL) zum Einsatz um nur die .pdf und .txt Dateien auszugeben.
<pre>
<?php
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);

/**
 * Filter
 */
class mySizeFilterIterator extends FilterIterator
{
    protected $isMinSize = true;
    protected $size = 0;

    /**
     *
     * @param Iterator
     * @param integer
     * @param boolean
     */
    public function __construct(Iterator $iterator,
                                $size,
                                $minSize = true)
    {
        parent::__construct($iterator);
        $this->size = $size;
        $this->isMinSize = $minSize;
    }

    /**
     * Filtert ungewünschte Einträge heraus
     * @throws InvalidArgumentException
     * @return bool
     */
    public function accept() {
        if (!parent::current() instanceof SplFileInfo) {
            $message = 'Iterators value need to be a SplFileInfo-Object';
            throw new InvalidArgumentException($message);
        }
        if ($this->isMinSize) {
            if (parent::current()->getSize() <= $this->size) {
                return false;
            }
        } else {
            if (parent::current()->getSize() >= $this->size) {
                return false;
            }
        }
        return true;
    }
}

$sizeIterator = new mySizeFilterIterator($recursiveIterator, 300, true);

foreach($sizeIterator as $key => $value) {
    // $key ist der alte Key
    // $value weiterhin das SplFileInfo-Objekt
    echo $key . PHP_EOL;
}
echo '<hr />';

// Jetzt erweitern wir das ganze noch mit dem RegexIterator um nur
// pdf und txt-Dateien zu bekommen
$regexIterator = new RegexIterator($sizeIterator,
                                   '~^.+\.(pdf|txt)$~i');

foreach($regexIterator as $key => $value) {
    // $key ist der alte Key
    // $value weiterhin das SplFileInfo-Objekt
    echo $key . PHP_EOL;
}

?>
</pre>

Trackbacks (0)

Trackbackurl: http://www.robo47.net/trackback/snippet/28

Es sind keine Trackbacks vorhanden.


Kommentare (0)

Es sind noch keine Kommentare vorhanden.

Die Kommentare zu diesem Beitrag sind gesperrt.

You liked it ? Link it on your homepage or blog: