Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP의 ftp_nb_get() 함수 – FTP 서버에서 파일 비동기 다운로드하기

PHP의 ftp_nb_get() 함수는 FTP 서버에 있는 파일을 로컬 시스템으로 다운로드할 때 사용합니다. 함수 이름의 'nb'는 non-blocking(비차단)을 의미하며, 다운로드가 진행되는 동안에도 스크립트가 멈추지 않고 다른 작업을 계속 수행할 수 있다는 점이 일반적인 ftp_get() 함수와의 큰 차이입니다.

문법

ftp_nb_get(con, local_file, server_file, transfer_mode, beg_pos);

매개변수

  • con − FTP 연결 리소스입니다.

  • local_file − 다운로드한 내용을 저장할 로컬 파일 경로입니다.

  • server_file − 서버에서 다운로드할 파일 경로입니다.

  • transfer_mode − 데이터 전송 모드를 지정합니다. 사용 가능한 값은 다음과 같습니다.

    - FTP_ASCII
    - FTP_BINARY

  • beg_pos − 다운로드를 시작할 위치(오프셋)입니다.

반환값

ftp_nb_get() 함수는 다음 세 가지 값 중 하나를 반환합니다.

  • FTP_FAILED − 송수신에 실패한 경우

  • FTP_FINISHED − 송수신이 완료된 경우

  • FTP_MOREDATA − 송수신이 아직 진행 중인 경우

예제

다음은 ftp_nb_get() 함수를 사용해 FTP 서버의 파일을 비동기 방식으로 다운로드하는 예제입니다.

<?php
    $ftp_server = "192.168.0.4";
    $ftp_user = "jacob";
    $ftp_pass = "tywg61gh";

    // FTP 서버에 연결
    $con = ftp_connect($ftp_server) or die("$ftp_server 에 연결할 수 없습니다");

    // 로그인
    $login = ftp_login($con, $ftp_user, $ftp_pass);

    $my_serverfile = "demo.txt";   // 서버 측 파일
    $local_file = "new.txt";       // 저장할 로컬 파일

    // 비동기(non-blocking) 다운로드 시작
    $c = ftp_nb_get($con, $local_file, $my_serverfile, FTP_ASCII);

    // 다운로드가 완료될 때까지 반복
    while ($c == FTP_MOREDATA) {
        // 다운로드 계속 진행
        $c = ftp_nb_continue($con);
        // 필요하다면 이 사이에 다른 작업을 함께 수행할 수 있습니다.
    }

    if ($c != FTP_FINISHED) {
        echo "서버 파일 다운로드 중 오류가 발생했습니다!";
        exit(1);
    }

    // FTP 연결 종료
    ftp_close($con);
?>

위 예제의 동작 흐름을 살펴보면, 먼저 ftp_nb_get()으로 다운로드를 시작하고 반환값이 FTP_MOREDATA인 동안 ftp_nb_continue()를 반복 호출하여 다운로드를 이어갑니다. 다운로드가 정상적으로 끝나면 반환값은 FTP_FINISHED가 되고, 실패한 경우에는 FTP_FAILED가 반환되므로 이 값을 확인해 오류 처리를 할 수 있습니다. 이처럼 비차단 방식을 활용하면 대용량 파일을 다운로드하는 동안에도 진행 상태 표시 등 다른 작업을 병행할 수 있다는 장점이 있습니다.