Programming/PHP

(PHP) 빈 디렉토리 삭제하기

가우리언 2011. 5. 14.
728x90
반응형

파일서비스를 하다 보면, 불필요하게 비어 있는 디렉토리들이 우후죽순으로 생겨난다. 용량은 얼마 차지하지 않겠지만, 관리상 지저분한 면이 있으니, 깔끔한(?) 성격을 가진 관리자라면 이것 조차도 지우고 싶을 것이다. 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);
}
728x90
반응형

댓글