평범한 이야기들

[PHP] 디렉토리 내용 삭제 및 디렉토리 삭제 본문

평범한 개발 이야기/PHP

[PHP] 디렉토리 내용 삭제 및 디렉토리 삭제

songsariya 2020. 8. 13. 11:56
728x90

1. rmdir()

php에서 기본적으로 제공해 주는 rmdir() 함수의 정의는 다음과 같다.

rmdir ( string $dirname [, resource $context ] ) : bool

기본적으로 디렉토리를 삭제를 해준다. 하지만 해당 디렉토리 안에 내용이 존재하게 되면 false 리턴하게 된다.

 

따라서 추가적인 함수를 만들어서 사용해야 한다.

 

2. 디렉토리 내용 삭제

rmdir() 함수의 부족한 부분을 채워주는 rmdir_all() 함수의 소스이다.

<?php

$delete_path = "/home/sari/images/100/10";
rmdir_all($delete_path);


function rmdir_all($delete_path) {
	$dirs = dir($delete_path);

	while(false !== ($entry = $dirs->read())) {
		// 디렉토리의 내용을 하나씩 읽는다.
		if(($entry != '.') && ($entry != '..')) {
			// 디렉토리의 내용중 현재폴더, 상위폴더가 아니면 (즉 파일 및 디렉토리)            
			if(is_dir($delete_path.'/'.$entry)) {
				//디렉토리이면 재귀호출로 다시 삭제 시작.
				rmdir_all($delete_path.'/'.$entry);
			} else {
				//해당 파일 삭제
				@unlink($delete_path.'/'.$entry);
			}
		}
	}

	$dirs->close();

	// 최종 디렉토리 삭제
	@rmdir($delete_path);
}

 

주의사항은 삭제하고자 하는 디렉토리의 모든 내용을 지우기 때문에

$delete_path의 경로가 정상적인 경로인지 검증하는 로직을 추가로 해주어야 좀 더 안전하게 사용할 수 있다.

 

 

728x90
Comments