PHP 에서 폴더나 파일을 복사하기 위한 함수로 copy() opendir() readdir() 등등이 제공되는데요, 특정 폴더를 하위폴더와 하위폴더 내의 파일까지 한번에 복사하는 방법을 알려드립니다
하위폴더 까지 복사하기 위해서는 재귀함수(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 |
위와 같이 함수를 작성한 후에 아래와 같이 호출만 해주면 원본폴더와 원본폴더의 하위폴더, 그리고 하위폴더내에 포함된 모든 파일까지, 한번에 복사되게 됩니다
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 로 폴더 전체를 복사하는 방법에 대해 알아봤습니다
php URL 파싱하기, parse_url 함수를 쓰거나 직접 파싱하기, 동해둘리의 IT 스터디 (0) | 2021.02.05 |
---|---|
php 문자열 찾기 , javascript 문자열 찾기 (0) | 2020.11.08 |
blocked by CORS policy Access-Control-Allow-Origin 서로다른 도메인에서 ajax 크로스도메인 호출문제 해결하기 (3) | 2019.12.09 |
php 디렉토리 파일 리스트, 서브디렉토리 까지 뿌려주기 ..... php폴더 파일리스트,서브폴더리스트 (0) | 2019.10.11 |
PHPSESSID 가 주소창에 표시되는 것 방지하기, PHP코딩팁 / ini_set() (0) | 2019.09.21 |
댓글 영역