php ftp에는 다양한 기능을 제공합니다. 그중 서버로 전송된 데이터를 다른 서버, 혹은 호스팅을 사용 중이라도 ftp기능을 지원한다면, 두 서버 간에 데이터 공유가 가능합니다.

다시 말해 웹사이트는 A 호스트로 운영을 하고, 데이터(파일 서버)는 B 호스트에 보관하는데, 사용자 요청시만 A 호스트로 업로드하거나 다운로드합니다.

가능하다면 골드회원은 C 호스트 파일다운로드권한을 주고, 실버회원은 B 호스트 파일다운로드권한 부여를 해서 파일 관리도 가능할 지도 모릅니다.

다음은 사용자가 업로드한 파일을 B 호스트로 원격 업로드합니다.

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

 // 디비에 저장될 파일 이름 
 $filename = $_FILES['userfile']['name'];
 // B 호스트에 저장될 실제 파일
 $tmpfile = md5("habony_" . $_FILES['userfile']['tmp_name']); 
 $fp = fopen($tmpfile, 'r'); 

 // 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 호스트로 이동
 // B 호스트에 저장되면 DB 에 파일정보를 업데이트해줌
 // ftp_put 은 로컬에서만 가능하므로 ftp_fput을 사용합니다.
 if (ftp_fput($conn_id, $tmpfile, $fp, FTP_BINARY)) { 
    echo "Successfully uploaded $filename\n";
 } else { 
    echo "There was a problem while uploading $file\n"; 
 } 

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

필요시 업로드한 파일을 A 호스트로 가져 오는데, 이는 사용자가 파일 다운로드 요청이나 이미지 출력 요청을 하였을 때만 처리되는 부분입니다.

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

 // B 호스트에서 가져올 실제 파일
 $remote_file = "가져올 파일";
 // A 호스트로 저장하거나 브라우저로 출력해야 할 파일
 $local_file = "저장할 파일";

 // 임시 파일을 엽니다.
 $fp = fopen($local_file, 'w+');

  // 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);

 // 파일을 A 호스트로 업로드하고, 
 // $file 로 다운로드하거나 저장할 코드를 작성하면 됩니다.
 // ftp_get 은 로컬에서만 가능하므로 ftp_fget을 사용합니다.
 if (ftp_fget($conn_id, $fp, $remote_file, FTP_BINARY, 0)) { 
    while(!feof($fp)){ 
         $file .= fread($fp, 1024); 
    }
    // 파일 다운로드나 파일 출력 처리 부분입니다.
    echo "Successfully written to $local_file\n"; 
 } else { 
    echo "There was a problem while downloading $remote_file 
            to $local_file\n"; 
 } 

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

사용자가 자료 삭제 요청하였을 때, B 호스트 파일 삭제 처리 부분입니다.

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

   // 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 호스트 파일 삭제
 // 파일 삭제가 정상적이면 DB 에 저장된 데이터도
 // 삭제 되도록 코드를 작성하면 됩니다.
 if (ftp_delete($conn_id, $file)) {
      echo "$file deleted successful\n";
 } else {
      echo "could not delete $file\n";
 }

 ftp_close($conn_id);
 ?> 

이러한 기능은 서버일 경우 문제되지 않으나 호스팅을 받는 입장이라면 제한이 될 수 있습니다. 그래서 다음 코드로 ftp 지원여부 확인이 가능합니다.

<?php
 if(!function_exists('ftp_login')){
      echo "ftp 지원이 안됩니다.";
 }
 ?>

0 댓글