ディレクトリ検索&削除@動画サイトへの道
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しないと削除できないんですね。
これも結構調べたり試行錯誤した。
勉強になったっす。