ディレクトリ検索&削除@動画サイトへの道

PHPディレクトリ操作を行う為のクラスを作成。
ディレクトリ関係のメソッドはPHPに定義してあるけど、再帰的な処理をしてくれるものが見当たらなかったので作った。
↓はその一部のソースっす。

    public static function getFileList($dirpath, $mode = self::FILELIST_FILEONLY) {
        $list = array();
        if ($handle = opendir($dirpath)) {
            while (false !== ($file = readdir($handle))) {
                if ($file === "." || $file === "..") { //"." or ".."は入れない
                    continue;
                }
                if ($mode === self::FILELIST_FILEONLY) {
                    if (is_dir($dirpath . '/' . $file) === true) { //"フォルダは含めない"
                        continue;
                    }
                }
                $list[] = $file;
            }
        } else {
            return false;
        }
        return $list;
    }
    public static function search($dirpath, $matchPattern) {
        $filelist = self::getFileList($dirpath, self::FILELIST_DIR_FILE);
        $matchList = array();
        foreach ($filelist as $filename) {
            $filePath = $dirpath . '/' . $filename;
            if (is_dir($filePath) === true) { //ディレクトリの場合、再検索
                $matchList = array_merge($matchList, self::search($filePath, $matchPattern));
            }
            $match = preg_match($matchPattern, $filename);
            if ($match === 1) {
                $matchList[] = $dirpath . '/' . $filename;
            }
        }
        return $matchList;
    }

    public static function delete($dirpath) {

        $filelist = self::getFileList($dirpath, self::FILELIST_DIR_FILE);
        $matchList = array();
        foreach ($filelist as $filename) {
            $filePath = $dirpath . '/' . $filename;
            if (is_dir($filePath) === true) {
                self::delete($filePath);
                continue;
            }
            unlink($filePath);
        }
        closedir(opendir($dirpath));
        rmdir($dirpath);
        return true;
    }

search関数、delete関数は再帰的に呼び出して処理しています。
delete関数は中にファイルがあると削除できないし、かつclosedirしないと削除できないんですね。

これも結構調べたり試行錯誤した。
勉強になったっす。