PHP에서 디렉토리 삭제

Subodh Poudel 2023년6월20일
  1. rmdir() 함수를 사용하여 PHP에서 빈 디렉토리 삭제
  2. 재귀를 사용하여 PHP에서 비어 있지 않은 디렉토리 삭제
PHP에서 디렉토리 삭제

이 튜토리얼은 PHP에서 디렉토리를 삭제하는 두 가지 방법을 설명합니다. 여기에서는 두 가지 시나리오를 다룰 것입니다.

첫 번째는 빈 디렉터리를 삭제하고 두 번째는 비어 있지 않은 디렉터리를 삭제합니다.

rmdir() 함수를 사용하여 PHP에서 빈 디렉토리 삭제

rmdir() 함수를 사용하여 PHP에서 빈 디렉토리를 삭제할 수 있습니다. 이 함수는 내장된 PHP 함수입니다.

이 함수는 내부에 내용이 없는 경우에만 디렉토리를 삭제합니다. 삭제할 디렉토리를 rmdir() 함수의 매개변수로 제공할 수 있습니다.

이 함수는 성공한 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다.

디렉토리를 제거하려면 디렉토리가 존재해야 합니다. mkdir() 함수를 사용하여 데모용 디렉토리를 생성합니다.

이 함수는 경로 이름을 매개변수로 사용합니다.

예를 들어 $path 변수를 생성하고 생성할 디렉토리의 경로 이름을 저장합니다. 다음으로 $path를 매개변수로 사용하여 mkdir() 함수를 사용합니다.

예제 코드:

$path =$_SERVER['DOCUMENT_ROOT']."/newFolder";
mkdir($path);

위의 코드 예제는 PHP 문서 루트에 newFolder 디렉토리를 생성합니다. $path 변수를 인쇄하면 Linux에서 출력이 다음과 같이 표시됩니다.

/var/www/html/newFolder

Windows에서 출력은 다음과 같습니다.

C:\xampp\htdocs\newFolder

디렉토리를 생성했으므로 이제 rmdir()을 사용하여 디렉토리를 삭제할 차례입니다.

예제 코드:

if(is_dir($path)){
 rmdir($path);
 echo "the directory is deleted";
}

출력:

the directory is deleted

문서 루트에서 myFolder 디렉토리를 삭제하기 위해 is_dir() 함수와 rmdir() 함수를 사용하여 디렉토리가 존재하는지 확인했습니다.

재귀를 사용하여 PHP에서 비어 있지 않은 디렉토리 삭제

rmdir()은 빈 디렉터리만 삭제하므로 PHP에서 비어 있지 않은 디렉터리를 삭제하려면 재귀 기능과 rmdir()을 사용해야 합니다. 이 방법에서는 array_diff(), scandir()unlink()와 같은 몇 가지 PHP 함수를 사용합니다.

array_diff() 함수는 여러 배열을 매개변수로 사용하고 첫 번째 매개변수 배열에만 존재하는 값으로 배열을 반환합니다.

scandir() 함수는 지정된 경로의 모든 파일과 디렉토리를 나열합니다. unlink() 함수는 매개변수에 지정된 파일을 삭제합니다.

디렉터리 삭제의 개념은 먼저 디렉터리 내의 모든 파일과 폴더를 찾는 것을 재귀적으로 처리합니다. 그런 다음 상위 디렉터리 내부의 모든 콘텐츠를 통과하는 루프가 생성됩니다.

재귀 작업은 깊이에 도달할 때까지 상위 디렉터리 내의 각 폴더에 적용됩니다. 깊이에서 파일은 unlink() 기능을 사용하여 삭제됩니다.

프로그램은 순회 경로로 되돌아가 모든 파일을 삭제합니다. 모든 파일을 삭제한 후 마지막으로 상위 디렉터리를 삭제합니다.

디렉터리 구조가 다음과 같은 시나리오를 생각해 봅시다.

testFolder
├── abc.png
├── abc.text
└── sub
 └── abc.jpeg

아래 코드 예제는 testFolder를 재귀적으로 삭제합니다.

예제 코드:

function deleteDirectory($path){

 $files = array_diff(scandir($path), array('.','..'));
 foreach($files as $file){
 (is_dir("$path/$file")) ? deleteDirectory("$path/$file") : unlink("$path/$file");
 }
 return rmdir($path);
}
$path =$_SERVER['DOCUMENT_ROOT']."/testFolder";
deleteDirectory($path);

여기서 deleteDirectory() 함수는 삭제할 디렉터리의 경로 이름인 $path 매개변수를 사용하는 사용자 정의 함수입니다. testFolder는 제공된 $path입니다.

먼저 중첩된 scandir() 함수가 실행됩니다. testFolder 디렉토리의 모든 내용을 배열로 나열합니다.

Array ( [0] => . [1] => .. [2] => abc.png [3] => abc.text [4] => sub )

다음으로 array_diff() 함수를 사용하여 .를 제거했습니다. 및 .. 위의 배열에서. 단일 점은 현재 디렉토리를 나타내고 이중 점은 상위 디렉토리를 나타냅니다.

결과적으로 $files 배열에는 abc.png, abc.textsub가 포함됩니다. 그런 다음 foreach() 루프를 사용하여 이러한 파일과 폴더를 반복했습니다.

루프 내부에서 iterable이 디렉토리인지 확인했습니다. 그러나 처음 두 항목은 그렇지 않습니다.

따라서 unlink() 함수를 사용하여 제거합니다. 세 번째 반복 가능한 sub는 조건을 충족하는 디렉토리입니다.

따라서 deleteDirectory() 함수가 재귀적으로 호출됩니다. 이번에는 디렉토리 내부에 파일이 하나만 있습니다.

파일은 다른 파일과 마찬가지로 unlink() 함수로 삭제됩니다. 마지막으로 실행이 루프를 종료합니다.

다음으로 sub 디렉토리는 rmdir() 함수로 삭제됩니다. 그런 다음 재귀 트리가 다시 순회하고 상위 디렉토리 testFolder가 삭제됩니다.

따라서 PHP에서 다양한 함수를 사용하여 재귀적으로 디렉토리를 삭제하는 방법을 배웠습니다.

Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

관련 문장 - PHP Directory