ftp_nb_fput() 함수는 이미 열려 있는 파일의 내용을 읽어 FTP 서버상의 파일로 저장(업로드)합니다. 이 함수는 비동기(non-blocking) 방식으로 동작하기 때문에, 파일 전송이 진행되는 동안에도 스크립트가 다른 작업을 계속 수행할 수 있다는 것이 가장 큰 특징입니다.
문법(Syntax)
ftp_nb_fput(con, remote_file, open_file, transfer_mode, beg_pos);
매개변수(Parameters)
con − 사용할 FTP 연결 리소스입니다.
remote_file − 업로드될 대상 파일(서버 측 파일 경로)입니다.
open_file − 열려 있는 로컬 파일을 가리키는 파일 포인터입니다.
transfer_mode − 데이터 전송 모드를 지정합니다. 사용 가능한 값은 다음과 같습니다.
-
FTP_ASCII, 또는-
FTP_BINARYbeg_pos − 전송을 시작할 위치(오프셋)입니다.
반환값(Return)
ftp_nb_fput() 함수는 아래 세 가지 값 중 하나를 반환합니다.
FTP_FAILED − 전송(송신/수신)에 실패한 경우
FTP_FINISHED − 전송이 정상적으로 완료된 경우
FTP_MOREDATA − 전송이 아직 진행 중인 경우
사용 예제
다음은 ftp_nb_fput() 함수를 활용해 로컬 파일을 FTP 서버에 업로드하는 예제입니다. 반환값이 FTP_MOREDATA인 동안 ftp_nb_continue()를 반복 호출하여 전송을 이어갑니다.
<?php
$ftp_server = "192.168.0.4";
$ftp_user = "jacob";
$ftp_pass = "tywg61gh";
// FTP 서버에 연결
$con = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($con, $ftp_user, $ftp_pass);
$my_serverfile = "demo.txt"; // 서버에 저장될 파일명
$local_file = "new.txt"; // 업로드할 로컬 파일
$file_pointer = fopen($local_file, "r");
// 비동기 방식으로 업로드 시작
$c = ftp_nb_fput($con, $my_serverfile, $file_pointer, FTP_BINARY);
while ($c == FTP_MOREDATA) {
// 전송이 완료될 때까지 계속 진행
$c = ftp_nb_continue($con);
}
if ($c != FTP_FINISHED) {
echo "파일 업로드 중 오류가 발생했습니다!";
exit(1);
}
// 연결 종료
ftp_close($con);
?>참고 사항
ftp_nb_fput()은 일반적인 ftp_fput()과 달리 블로킹 없이 동작하므로, 전송 진행률을 표시하거나 전송 중에 다른 처리를 병행해야 하는 상황에 적합합니다. 전송 모드는 텍스트 파일에는 FTP_ASCII를, 이미지·실행 파일 등 바이너리 데이터에는 FTP_BINARY를 사용하는 것이 좋습니다.