dinist

PHP 폴더 복사 함수 코드 본문

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);

 

실행결과

잘못된 내용이나 더 나은 코드가 있다면 언제든 댓글 남겨주세요..!