php ftp에는 다양한 기능을 제공합니다. 그중 서버로 전송된 데이터를 다른 서버, 혹은 호스팅을 사용중이라도 ftp기능을 지원한다면, 두 서버간에 데이터 공유가 가능합니다. 다시 말해 웹사이트는 A 호스트로 운영을 하고, 데이터(파일 서버)는 B 호스트에 보관하는데, 사용자 요청시만 A 호스트로 업로드하거나 다운로드합니다.

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

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

예재(ex #1

 <?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$fpFTP_BINARY
)) { 
    echo 
"Successfully uploaded $filename\n"
;
 } else { 
    echo 
"There was a problem while uploading $file\n"

 } 

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


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

예제(ex #2

 <?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_fileFTP_BINARY0
)) { 
    while(!
feof($fp
)){ 
         
$file .= fread($fp1024
); 
    }
    
// 파일 다운로드나 파일 출력 처리 부분입니다.
    
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 호스트 파일 삭제 처리 부분입니다.

예제(ex #3

<?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 지원이 안됩니다."
;
 }
 
?>

 


◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : NEXT ▶