php ftp에는 다양한 기능을 제공합니다. 그중 서버로 전송된 데이터를 다른 서버, 혹은 호스팅을 사용 중이라도 ftp기능을 지원한다면, 두 서버 간에 데이터 공유가 가능합니다.
다시 말해 웹사이트는 A 호스트로 운영을 하고, 데이터(파일 서버)는 B 호스트에 보관하는데, 사용자 요청시만 A 호스트로 업로드하거나 다운로드합니다.
가능하다면 골드회원은 C 호스트 파일다운로드권한을 주고, 실버회원은 B 호스트 파일다운로드권한 부여를 해서 파일 관리도 가능할 지도 모릅니다.
다음은 사용자가 업로드한 파일을 B 호스트로 원격 업로드합니다.
<?php
$filename = $_FILES['userfile']['name'];
$tmpfile = md5("habony_" . $_FILES['userfile']['tmp_name']);
$fp = fopen($tmpfile, 'r');
$ftp_server = "호스트 혹은 ip주소";
$ftp_user_name = "접속 아이디";
$ftp_user_pass = "접속 패스워드";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
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
$remote_file = "가져올 파일";
$local_file = "저장할 파일";
$fp = fopen($local_file, 'w+');
$ftp_server = "호스트 혹은 ip주소";
$ftp_user_name = "접속 아이디";
$ftp_user_pass = "접속 패스워드";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
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
$file = 'public_html/test.php';
$ftp_server = "호스트 혹은 ip주소";
$ftp_user_name = "접속 아이디";
$ftp_user_pass = "접속 패스워드";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
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 지원이 안됩니다.";
}
?>