function my_handler($filename) { echo $filename . "\n"; } find_files('c:/', '/php$/', 'my_handler');
And the actual snippet
function find_files($path, $pattern, $callback) { $path = rtrim(str_replace("\\", "/", $path), '/') . '/'; $matches = Array(); $entries = Array(); $dir = dir($path); while (false !== ($entry = $dir->read())) { $entries[] = $entry; } $dir->close(); foreach ($entries as $entry) { $fullname = $path . $entry; if ($entry != '.' && $entry != '..' && is_dir($fullname)) { find_files($fullname, $pattern, $callback); } else if (is_file($fullname) && preg_match($pattern, $entry)) { call_user_func($callback, $fullname); } } }