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.
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/28Es sind keine Trackbacks vorhanden.
You liked it ? Link it on your homepage or blog:



Benjamin Steininger ist Webentwickler auf der Suche nach einem neuen Job und
photographiert sehr gerne. Er beschäftigt sich viel mit dem Internet, PHP, Symfony, Testing und hat einen
Kommentare (0)
Es sind noch keine Kommentare vorhanden.
Die Kommentare zu diesem Beitrag sind gesperrt.