Web/PHP
PHP 폴더 복사 함수 코드
dinist
2023. 7. 24. 13:49
PHP에서는 폴더 복사 함수가 없으므로 직접 구현해야한다.
opendir로 대상 디렉터리 내의 모든 파일, 디렉터리를 확인하여 현재디렉터리, 상위디렉터리,
숨김파일 및 폴더(.으로 시작하는 이름)를 제외한 모든 파일과 디렉터리를 복사하는 코드를 작성해봤다.
만약 숨김파일 및 폴더까지 가져오려면 if 조건절의 내용을 수정해야한다.
하위 디렉터리에 있는 모든 파일까지 재귀호출로 가져온다.
재귀호출을 사용하였으므로 하위 폴더 및 파일의 갯수가 많을 경우 시간이 오래걸릴것이므로 하위 폴더 및 파일의 갯수가 많지 않을경우에 사용하는것을 권장.
복사를 위한 원본폴더의 구조 및 복사 코드 위치는 다음과 같다.
directoryCopy.php 의 파일은 다음과 같다.
<?php
$target_base = __DIR__.DIRECTORY_SEPARATOR;
$from_dir_name = "Test"; // 복사할 디렉터리명
$to_dir_name = "Test_copy"; // 복사될 디렉터리명
$from_dir_path = $target_base.DIRECTORY_SEPARATOR.$from_dir_name;
$to_dir_path = $target_base.DIRECTORY_SEPARATOR.$to_dir_name;
function directoryCopy($from,$to){
$dir_resource = opendir($from);
@mkdir($to,0755); // 폴더의 기본 퍼미션은 0755 이다.
while($dir_resource && $current_obj = readdir($dir_resource)):
if(strpos($current_obj,".") !== 0): // 현재디렉터리, 상위디렉터리, *nix 숨김파일 및 폴더 제외
if(is_dir($from.DIRECTORY_SEPARATOR.$current_obj)):
directoryCopy($from.DIRECTORY_SEPARATOR.$current_obj,$to.DIRECTORY_SEPARATOR.$current_obj);
else:
$from_path = $from.DIRECTORY_SEPARATOR;
$to_path = $to.DIRECTORY_SEPARATOR;
copy($from_path.$current_obj,$to_path.$current_obj);
endif;
endif;
endwhile;
closedir($dir_resource);
}
directoryCopy($from_dir_path,$to_dir_path);
실행결과
잘못된 내용이나 더 나은 코드가 있다면 언제든 댓글 남겨주세요..!