PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rekursive Dateisuche :::: Mit exec oder RecursiveDirectoryIterator unterschiedlich



celindir
06-08-2009, 10:10
Hallo zusammen,

ich hatte bisher in einem Skript einen exec-Befehl, um rekursiv alle Dateien in einem Verzeichnis zu finden.

Parameter z.B.
$basedir= ".test/";
$size=100;
$filter="jpg";
$maxdepth=2;



//// Find Suche ////
$command='/opt/bin/find '.$basedir.' -size +'.$size.' -iname "*.'.$filter.'" -maxdepth '.$maxdepth;
exec("$command",$results);
$count=count($results);
print "Anzahl gefundener Dateien $count";

//// END Find Suche ////

Das klappt auch prima.

Allerdings wollte ich nun das Ganze ohne den exec nur mit PHP-Mitteln machen und habe daher folgenden Code genommen:


//// PHP Suche ////

$it = new RecursiveDirectoryIterator($basedir);
foreach(new RecursiveIteratorIterator($it) as $file) {
$path_parts = pathinfo($file);
preg_match_all("[\/]",$file, $matches);
if (filesize($file)/1024 > $size && $path_parts['extension'] == $filter && count($matches[0]) < $maxdepth)
{
$results[] = $file;
}
}

$count=count($results);
print "Anzahl gefundener Dateien $count";
//// END PHP Suche ////

Dummerweise ist das Ergebnis der Suche nicht identisch es werden häufig weniger Dateien gefunden als mit der ersten Variante.

Mir fehlen im Moment die Ideen, woran das liegen könnte.

Sachdienliche Hinweise bitte hier posten. Danke

undefined
06-08-2009, 20:06
Falsche Parent Klasse ;)


$mp = dirname( __FILE__ );
$dirh = new DirectoryIterator( $mp );
foreach ( $dirh as $f ) {
$Depth = ( substr_count( $f->getPathname(), "/" ) - substr_count( $mp, "/" ) );
if ( ! $f->isDot() ) {
var_dump( "<pre>",
$f->getFilename(),
$f->getPathname(),
$Depth, $f->getType(),
$f->getMTime(),
"</pre>" );
} else
continue;
}
unset( $dirh );
clearstatcache();