PHP FTP 서버 파일 전송 방법 샘플

다른 서버에 파일을 전송하고 싶은 경우에 FTP를 사용하는 경우가 많습니다.

PHP에서도 FTP 함수를 사용해 다른 서버에 파일을 보낼 수 있습니다.

FTP 함수 사용방법과 예제를 보도록 하겠습니다.

 

FTP 파일 전송

FTP 함수를 사용해 다른 서버에 파일을 전송하는 단계를 보면 다음과 같습니다.

  • 서버 접속
  • 서버 로그인
  • 패시브 모드 설정
  • 파일 업로드
  • 서버 접속 해제

파일 전송을 하는 샘플을 보면서 자세한 내용을 살펴보겠습니다.

$ftp_server = FTP_IPADDRESS;
$ftp_port = 21;
$ftp_user_name = FTP_LOGIN_ID;
$ftp_user_pass = FTP_LOGIN_PASSWORD;
$ftp_send_file = FTP_FILE_PATH;
$ftp_remote_file = FILE_NAME;

// FTP서버 접속
$conn_id = ftp_connect($ftp_server, $ftp_port);

// FTP서버 접속 실패한 경우
if($conn_id == false){
    print_r("[IP:".$ftp_server.":".$ftp_port ."] FTP 서버 접속 실패");
}

// FTP서버 로그인
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// 로그인 실패한 경우
if($login_result == false){
    print_r("[IP:".$ftp_server.":".$ftp_port ."], [USER:".$ftp_user_name."] 로그인 실패");
}

// 패시브 모드 설정
ftp_pasv($conn_id, true);

// FTP 서버에 파일 전송
if (ftp_put($conn_id, $ftp_remote_file, $ftp_send_file, FTP_BINARY)) {
    print_r("파일 전송 (ftp) -> UPLOAD 성공");
} else {
    print_r("파일 전송 (ftp:".$conn_id.",".$ftp_remote_file.",".$ftp_send_file.") -> UPLOAD 실패");
}

// FTP 서버와 연결 끊음
ftp_close($conn_id);

 

샘플 소스 내용을 보겠습니다.

ftp_connect 함수를 호출해 FTP 서버에 접속을 합니다.

ftp_connect(IP 주소, 포트 번호)

 

포트 번호는 기본 21을 사용합니다.

FTP 서버에 접속이 되면 ftp_login 함수를 호출해 로그인을 합니다.

ftp_login(FTP 서버 커넥션, 로그인 유저, 로그인 패스워드)

로그인까지 완료가 끝나면 패시브 모드를 설정합니다.

ftp_pasv(FTP 서버 커넥션, true/flase);

 

패시브 모드 설정은 필요한 경우에 따라 설정을 합니다.

설정을 해야 하는 경우는 아래와 처럼 에러가 발생하는 경우에 패시브 모드를 설정해야 합니다.

ftp_get(): Illegal PORT command.

 

FTP 클라이언트 쪽이 방화벽 막혀있는 경우, 서버에서 응답을 못하는 경우가 있습니다.

이러한 경우 패시브 모드를 ON으로 설정하면 됩니다.

패시브 모드를 ON으로 설정하고 싶은 경우는 trueOFF으로 설정하고 싶은 경우는 false를 지정합니다.

파일을 전송하기 위해서는 ftp_put 함수를 호출합니다.

ftp_put(FTP 서버 커넥션, 서버에 저장될 파일, 전송할 파일, 전송모드)

ftp_put 지정한 전송할 파일이은 서버에 저장될 경로에 지정한 파일명으로 저장됩니다.

전송 모드는 FTP_ASCII 또는 FTP_BINARY로 지정해야 합니다.

처리가 끝나면 ftp_close 함수를 호출해 FTP 서버와 연결을 끊습니다.

ftp_close(FTP 서버 커넥션)

 

위 샘플에서는 전송 결과를 출력하는 print_r로 출력하고 있습니다.

만약 에러가 발생한 경우 Exception을 발생시키는 샘플을 보겠습니다.

$ftp_server = FTP_IPADDRESS;
$ftp_port = 21;
$ftp_user_name = FTP_LOGIN_ID;
$ftp_user_pass = FTP_LOGIN_PASSWORD;
$ftp_send_file = FTP_FILE_PATH;
$ftp_remote_file = FILE_NAME;

try{

    // FTP서버 접속
    $conn_id = ftp_connect($ftp_server, $ftp_port);

    // FTP서버 접속 실패한 경우 Exception 처리
    if($conn_id == false){
        throw new Exception("[IP:".$ftp_server.":".$ftp_port ."] FTP 서버 접속 실패");
    }

    // FTP서버 로그인
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

    // FTP서버 로그인 실패한 경우 Exception 처리
    if($login_result == false){
        throw new Exception("[IP:".$ftp_server.":".$ftp_port ."], [USER:".$ftp_user_name."] 로그인 실패");
    }

    // 패시브 모드 설정
    ftp_pasv($conn_id, true);

    // FTP 서버에 파일 전송
    if (ftp_put($conn_id, $ftp_remote_file, $ftp_send_file, FTP_BINARY)) {
        print_r("파일 전송 (ftp) -> UPLOAD 성공");
    } else {
    // FTP서버 파일 전송 실패한 경우 Exception 처리
        throw new Exception("파일 전송 (ftp:".$conn_id.",".$ftp_remote_file.",".$ftp_send_file.") -> UPLOAD 실패");
    }

    // FTP 서버와 연결 끊음
    ftp_close($conn_id);

} catch(Exception $e) {

    // FTP 서버와 연결 끊음
    ftp_close($conn_id);
    print_r($e->getMessage());
}

 

FTP 전송 처리 중 에러가 발생하는 경우 Exception을 발생하도록 했습니다.

정상 적으로 처리가 끝나면 ftp_close 함수를 호출해 FTP 서버와 연결을 끊습니다.

하지만 의도적으로 Exception을 발생시킨 에러 또는 예외 에러가 발생한 경우에도 catch 안에서 ftp_close 호출해 FTP 서버와 연결을 끊도록 하는 것이 좋습니다.

FTP 함수를 사용해 다른 서버에 파일을 전송하는 방법을 알아봤습니다.

댓글