2011-05-14

PHP : 빈 디렉토리 삭제하기

파일서비스를 하다 보면, 불필요하게 비어 있는 디렉토리들이 우후죽순으로 생겨난다. 용량은 얼마 차지하지 않겠지만, 관리상 지저분한 면이 있으니, 깔끔한(?) 성격을 가진 관리자라면 이것 조차도 지우고 싶을 것이다. Windows 에서는 빈 디렉토리를 지울 수 있는 유틸리티를 이용해서 지워도 되고, Unix 계열이라면 find 를 이용해서 지울 수 있다.

다음 PHP 코드를 이용하면, 모든 OS에서 동일하게 빈 디렉토리를 삭제할 수 있다. 같은 일을 하는 코드를 찾아봤지만, 없어서 직접 구현해보았다. 간단하다, 모든 디렉토리를 순회하면서 해당 디렉토리 내에 파일/디렉토리가 있는지 검사해서 아무 것도 없으면, 삭제 대상으로 등록하고, 나중에 한방에 지우도록 한 것이다.


// -----------------------------------------
// 빈 디렉토리 삭제
// -----------------------------------------
$dst_dir  = "C:\\";
// -----------------------------------------
 
function find_empty_folder($dst_dir) 
{
    $result = array();
 
    $i = 0;
    $rdi = new RecursiveDirectoryIterator($dst_dir);
    try {
        foreach (new RecursiveIteratorIterator($rdi, 
            RecursiveIteratorIterator::SELF_FIRST, 
            RecursiveIteratorIterator::CATCH_GET_CHILD) as $path) {
 
            if ($path->isDir()) {
                if(2 == count(scandir($path->__toString()))) {
                    $result[$i++] = $path->__toString();
                }
            }
        }
    } catch(Exception $e) {
        echo "Message: ".$e->getMessage();
    }
 
    return $result;
}
 
 
$list_empty_folder = find_empty_folder($dst_dir);
 
foreach($list_empty_folder as $empty_folder) {
    echo $empty_folder."\n";
    unlink($empty_folder);
}



댓글 없음:

댓글 쓰기