function _doWalkDir($item, $separator, $function_def, &$return_params, $params, $include_first, $level=0) { if($level > 0 || ($level == 0 && $include_first)) call_user_func_array($function_def, array('dir' => dirname($item), 'file' => basename($item), 'path' => $item, 'params' => $params, 'return_params' => &$return_params)); if(!is_dir($item)) return; $handle = opendir($item); while(($file = readdir($handle)) !== false) { if (($file == '.') || ($file == '..')) continue; Fs :: _doWalkDir($item . $separator . $file, $separator, $function_def, $return_params, $params, $level + 1); } closedir($handle); }