상세 컨텐츠

본문 제목

PHP 폴더 복사하기, 하위폴더까지 한번에 opendir, readdir

IT공부방/PHP

by 동해둘리 2020. 3. 31. 09:05

본문

반응형

PHP폴더 하위폴더까지 한번에 복사하기

 

PHP 에서 폴더나 파일을 복사하기 위한 함수로 copy() opendir() readdir() 등등이 제공되는데요, 특정 폴더를 하위폴더와 하위폴더 내의 파일까지 한번에 복사하는 방법을 알려드립니다

 

PHP 폴더복사, 하위폴더까지 복사

 

 

재귀함수 (Recursive Function) 에 대한 이해

하위폴더 까지 복사하기 위해서는 재귀함수(Recursive Function)에 대한 이해가 필요한데요, 재귀함수는 말 자체가 좀 어렵긴 하지만, 반복적으로 호출되는 함수 또는 자신이 자신을 호출하는 함수로 이해하면 되겠습니다. 

 

 

실제 코드 살펴보기 

 

하위폴더까지 복사하기 위한 함수는 다음과 같이 작성할 수 있습니다. recursive_copy() 라는 이름을 가진 함수인데요, 7번째 라인을 보시면 recursive_copy() 함수 내에서 자기자신을 호출하는 것을 볼 수 있습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   function recursive_copy($src,$dst) { 
        $dir = opendir($src);  
        @mkdir($dst);  
        while(false !== ( $file = readdir($dir)) ) {  
            if (( $file != '.' ) && ( $file != '..' )) {  
                if ( is_dir($src . '/' . $file) ) {  
                   recursive_copy($src . '/' . $file,$dst . '/' . $file); 
                }  
                else {  
                    copy($src . '/' . $file,$dst . '/' . $file);  
                }  
            }  
        }  
        closedir($dir);  
    }  
cs

 

 

recursive_copy($source_folder, $target_folder)

위와 같이 함수를 작성한 후에 아래와 같이 호출만 해주면 원본폴더와 원본폴더의 하위폴더, 그리고 하위폴더내에 포함된 모든 파일까지, 한번에 복사되게 됩니다

 

1
2
3
4
5
        $src = "./source_folder";
        $dst = "./target_folder";
 
        recursive_copy($src,$dst);
 
cs

 

 

 

함수 살펴보기

recursive_copy 함수가 하는일을 좀 더 살펴보면

 

1. 원본폴더를 opendir() 함수로 엽니다. 그리고 타겟폴더를 mkdir() 함수로 생성합니다. 

 

2. readdir() 함수로 원본폴더내의 내용(폴더 또는 파일)을 읽어옵니다

 

3. 읽어들일께 없을때까지 반복합니다 

 

 

이때 중요한것이 조건문입니다. 재귀함수는 반복적으로 호출되기 때문에 while 문장에서 탈출하기 위한 조건이 필요한데, readdir() 로 읽어들인 값이 false 가 되면, 즉 폴더내에 아무것도 없으면 while 반복문을 탈출하게 됩니다. 

 

 

4. 읽어들인 내용이 . 이거나 .. 이 아니면, 이라는 조건문이 있는데요, . 과 .. 은 자신과 상위폴더를 지칭하는 것으로 실제 폴더는 아니기 때문에 조건문을 작성해 주어야 합니다.

 

5. 읽어들인 후에는 isdir() 함수를 이용하여,  읽어들인 내용이 폴더인지 파일인지 구분합니다

 

6. 폴더일 경우 자기자신인 recursive_copy() 함수를 호출합니다. 이때 전달되는 인자값은 읽어들인 폴더가 됩니다 

 

7. 파일일 경우 copy()함수를 이용하여 복사합니다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   function recursive_copy($src,$dst) { 
        $dir = opendir($src);  
        @mkdir($dst);  
        while(false !== ( $file = readdir($dir)) ) {  
            if (( $file != '.' ) && ( $file != '..' )) {  
                if ( is_dir($src . '/' . $file) ) {  
                   recursive_copy($src . '/' . $file,$dst . '/' . $file); 
                }  
                else {  
                    copy($src . '/' . $file,$dst . '/' . $file);  
                }  
            }  
        }  
        closedir($dir);  
    }  
cs

 

 

이상, PHP 로 폴더 전체를 복사하는 방법에 대해 알아봤습니다

 

 

참고로 저 동해둘리가 직접 운영하는 '성공하는 중이다'  카페를 소개드립니다. 

각자의 분야에서 성공을 향해 가는 과정에서 힘이되는 이야기, 힘이되는 사진, 성공스토리, 실패스토리 등을 나누고자 합니다. 많은 참여 부탁드려요

 

https://cafe.naver.com/ingsuccess

 

성공하는 중이다 : 네이버 카페

성공을 위해 실패를 두려워하지 않는 분들의 이야기를 나누고 싶습니다. 우리는 성공하는 중이니까요!

cafe.naver.com

 

반응형

관련글 더보기

댓글 영역