Har en gammal hemmasnickrad funktion som har fungerat bra för mig.
function EnumFiles($Dir, $CallbackFunctionName, $Extensions = array(), $Recursive = False){
$DirHandle = opendir($Dir);
while ( ($Filename = readdir($DirHandle)) !== False ) {
if( ($Filename == '.') or ($Filename == '..') )
continue;
$Filename = $Dir . '/' . $Filename;
// Callback if filename ends with $Extension (if $Extension is specified)
$pathinfo = pathinfo( $Filename );
if( is_file($Filename) and (empty($Extensions) or in_array(strtolower($pathinfo['extension']), $Extensions)) ){
if (call_user_func($CallbackFunctionName, $Filename) === False)
return False;
}
// Enum subfolder if $Recursive is True
if( is_dir($Filename) and $Recursive){
if( EnumFiles($Filename, $CallbackFunctionName, $Extensions, $Recursive) === False)
return False;
}
}
closedir($DirHandle);
}
$Dir är alltså sökvägen till katalogen.
$CallbackFunctionName är namnet på den funktion som ska köras för varje hittad fil.
$Extensions är en array med filändelser.
$Recursive bestämmer ifall sökningen ska ske rekursivt, dvs i alla underkataloger också.
Som du ser ska "callbackfunktionen" ta ett enda argument, nämligen filnamnet. Funktionen kan returnera antingen True eller False. Returnerar den True så fortsätter sökningen, returnerar den False avbryts sökningen. Alltså är det mycket viktigt att du returnerar True (om du inte vill avbryta sökningen förstås).