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

PHP ftp_nb_fget() 함수 – FTP 서버 파일을 비동기 방식으로 다운로드하기

ftp_nb_fget() 함수는 FTP 서버에서 파일을 다운로드하여 이미 열려 있는 로컬 파일에 저장하는 PHP 내장 함수입니다. 함수 이름의 nb는 'non-blocking(비차단)'을 의미하며, 이 함수는 파일 전송이 완료될 때까지 기다리지 않고 즉시 반환합니다. 따라서 다운로드가 진행되는 동안에도 스크립트가 다른 작업을 동시에 수행할 수 있다는 큰 장점이 있습니다.

문법(Syntax)

ftp_nb_fget(con, open_file, server_file, transfer_mode, beg_pos);

매개변수(Parameters)

  • con − FTP 서버와의 연결 리소스입니다. ftp_connect() 함수로 생성한 연결을 사용합니다.

  • open_file − 다운로드한 데이터가 저장될 로컬 파일 포인터입니다. fopen()으로 미리 열어둔 파일이어야 합니다.

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

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

    - FTP_ASCII (텍스트 모드)

    - FTP_BINARY (바이너리 모드)

  • beg_pos − (선택 사항) 다운로드를 시작할 파일 내 위치입니다. 이전에 중단된 다운로드를 이어받을 때 유용합니다.

반환 값(Return Value)

ftp_nb_fget() 함수는 아래 세 가지 값 중 하나를 반환합니다:

  • FTP_FAILED − 전송(송신/수신)이 실패했음을 의미합니다.

  • FTP_FINISHED − 전송이 성공적으로 완료되었음을 의미합니다.

  • FTP_MOREDATA − 전송이 아직 진행 중임을 의미합니다. 이 경우 ftp_nb_continue()를 호출하여 다운로드를 계속 진행해야 합니다.

사용 예제

다음은 ftp_nb_fget() 함수를 사용하여 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";       // 저장될 로컬 파일

   // 로컬 파일 열기
   $file_pointer = fopen($local_file, "w");

   // 비동기 다운로드 시작
   $c = ftp_nb_fget($con, $file_pointer, $my_serverfile, FTP_BINARY);

   // 다운로드가 진행되는 동안 반복 처리
   while ($c == FTP_MOREDATA) {
      // 이 부분에서 다른 작업을 수행할 수 있습니다
      $c = ftp_nb_continue($con);
   }

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

   // 연결 종료 및 파일 닫기
   ftp_close($con);
   fclose($file_pointer);
?>

참고 사항

일반적인 ftp_fget() 함수는 다운로드가 완료될 때까지 스크립트 실행을 차단(blocking)하지만, ftp_nb_fget()은 FTP_MOREDATA를 반환하며 즉시 제어권을 돌려줍니다. 따라서 대용량 파일을 다운로드하면서 진행 상황을 표시하거나 다른 작업을 병렬로 처리해야 하는 상황에서 특히 유용하게 활용할 수 있습니다.