이 기능은 업,다운로드 중 다른 작업을 가능하게 해주는 진보된 기능입니다. 사용 방법은 이전 함수와 크게 다르지 않으니 어렵지 않습니다.

다음은 B 호스트에서 로컬로 다운로드합니다.

<?php 
 // ftp는 상대경로, 절대경로가 허용되지 않으며,
 // 보통 public_html, www, html 로 시작합니다.
 // public_html/userid 에서 자료를 가져 온다면,
 // ftp 경로는 "public_html/userid/파일" 이 됩니다.

 // B 호스트 정보
 $ftp_server = "호스트 혹은 ip주소"; 
 $ftp_user_name = "접속 아이디"; 
 $ftp_user_pass = "접속 패스워드"; 

 // B 호스트 접속
 $conn_id = ftp_connect($ftp_server); 

 // B 호스트 로그인 
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

 // 원격으로 B 호스트에서 다운로드합니다.
 // 로컬에 저장할 파일명, 필요시 경로도 같이 작성해 줍니다. 
 $file = 'test_body.php'; 
 $fp = fopen($file, 'w'); 

 // 원격으로 public_html/userid/test.php 파일을 가져옵니다.
 $ret = ftp_nb_fget($conn_id, $fp, 'public_html/userid/test.php', FTP_BINARY); 
 $i = 1;
 while ($ret == FTP_MOREDATA) { 

   // 다운로드중 다른 작업을 작성합니다.
   echo "${i} \n";
   $i++;
   $ret = ftp_nb_continue($conn_id); 
 } 
 if ($ret != FTP_FINISHED) { 
      echo "다운로드 중 에러가 발생하였습니다."; 
      exit(1); 
 } 
 

 ftp_close($conn_id); 
 fclose($fp); 
 ?>

다음은 로컬파일을 B 호스트로 업로드합니다.

<?php 
 // ftp는 상대경로, 절대경로가 허용되지 않으며,
 // 보통 public_html, www, html 로 시작합니다.
 // public_html/userid 에 자료를 저장한다면,
 // ftp 경로는 "public_html/userid/파일" 이 됩니다.

 // B 호스트 정보
 $ftp_server = "호스트 혹은 ip주소"; 
 $ftp_user_name = "접속 아이디"; 
 $ftp_user_pass = "접속 패스워드"; 

 // B 호스트 접속
 $conn_id = ftp_connect($ftp_server); 

 // B 호스트 로그인 
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

 // 원격으로 전송할 파일
 // 필요시 사용자 업로드 파일을 B 호스트로 전송시
 // $_FILES['userfile']['tmp_name'] 으로 작성하면 됩니다.
 $file = 'test.php'; 
 $fp = fopen($file, 'r'); 

 // 원격으로 public_html/userid/test.php 파일 이름으로 저장합니다.
 $ret = ftp_nb_fput($conn_id, 'public_html/userid/test.php', $fp, FTP_BINARY); 
 $i = 1;
 while ($ret == FTP_MOREDATA) { 

   // 업로드중 다른 작업을 작성합니다.
   echo "${i} \n";
   $i++;
   $ret = ftp_nb_continue($conn_id); 
 } 
 if ($ret != FTP_FINISHED) { 
      echo "업로드중 에러가 발생하였습니다."; 
      exit(1); 
 } 

 ftp_close($conn_id); 
 fclose($fp); 
 ?>

다음은 원격 업로드 이어전송하기 및 프로그레스 입니다.

<?php
 ob_end_flush();
 $remote_file = 'remote.txt';
 $local_file = 'local.txt';

 $fp = fopen($local_file, 'r');

 $conn_id = ftp_connect($ftp_server);
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

 $ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY);
 while ($ret == FTP_MOREDATA) {
     // 업로드 중 리소스 소멸시 재연결합니다.
     if(!isset($conn_id2)) {
         $conn_id2 = ftp_connect($ftp_server);
         $login_result2 = ftp_login($conn_id2, $ftp_user_name, $ftp_user_pass);
      }
        
      // 전송된 파일 크기를 측정합니다.
      if(isset($conn_id2)) {
          clearstatcache();
          $remote_file_size = ftp_size($conn_id2, $remote_file);
      }

      // 프로그레스
      $local_file_size  = filesize($local_file);
      if (isset($remote_file_size) && $remote_file_size > 0 ){
          $i = ($remote_file_size/$local_file_size)*100;
          printf("%d%% uploaded<br />\n", $i);
          flush();
      }  
       $ret = ftp_nb_continue($conn_id);
 }

 if ($ret != FTP_FINISHED) {
     print("There was an error uploading the file...<br />\n");
     exit(1);
 }
 else {
     print("ok!<br />\n");
 }

 ftp_close($conn_id); 

 fclose($fp);
 ?> 

0 댓글