윈도우에서는 별다른 설정없이 바로 사용 가능하나, 유닉스계열에서는 --enable-ftp 설정옵션을 하여야 합니다. 일반적인 ftp기능을 php로 구현이 가능하며, 실제 운영시 정보공유나 파일 분산작업이 가능하여 많이 사용되는 기능입니다.

우선 로그인폼과 로그인처리를 만들어 보겠습니다.


로그인폼 제작 -- login.php
<!DOCTYPE html>
<style> td { font-size:12pt; color: #666666}</style>
<BR />
<BR />
<BR />
<BR />
<table>
<form action='login_ok.php' method='post'>
<input type='hidden' name='mode' value='login' />
 <tr>
  <td colSpan="2">&nbsp;하보니&nbsp;Log in ...
 <tr>
  <td colSpan="2">&nbsp;Connect to FTP Server
 <tr>
  <td>&nbsp;Server
  <td>
  <input type='text' name='inputhost' value='' />
 <tr>
  <td>&nbsp;User
  <td>
   <input type='text' name='inputid' />
 <tr>
  <td>
   &nbsp;Password
  <td>
   <input type='password' name='inputpass' />
 <tr>
  <td>&nbsp;Port
  <td>
   <input type='text' name='port' size='4' value='21' />
    &nbsp;<input type='checkbox' name='ssl' value='y' />SSL-ftp
    &nbsp;<input type='checkbox' name='pasv' value='y' />Passive Mode
 <tr>
  <td colSpan="2">
   <INPUT type="submit" value="Log on" />
</form>
</table> 

로그인 처리 제작 -- login_ok.php

 <?php
 
// ftp_login 함수가 있는지 체크합니다.
 // ftp 기능이 활성화되어 있지 않다면 오류를 표시합니다.
 
if(!function_exists('ftp_login'
)){
      exit(
"ftp 기능을 지원하지 않습니다."
);
 }

 
$data 
= array();
 
$data = &$_POST
;
 
$data['time'] = 90
// 서버 접속 시간, 기본 90초 
 
unset($_POST); 
// 변수의 변질을 막기위해 삭제를 합니다.


 // 아이디, 패스워드값이 비어 있으면 에러
 
if (empty($data['inputhost'
])) {
      exit(
"호스트가 비어 있습니다."
);
 }
 if (empty(
$data['inputid'
])) {
      exit(
"아이디가 비어 있습니다."
);
 }
 if (empty(
$data['inputpass'
])) {
      exit(
"패스워드가 비어 있습니다."
);
 }

 
// 접속 포트, 기본 21
 
if($data['port'] !== 21
){
      if(!
ereg("^[1-9][0-9]*$"$data['port'
])){
           exit(
"잘못된 포트입니다."
);
      }
 }

 
$ftp_conn false
;
 if (
$data['ssl'] === "y"
) {
      
// 보안접속시 실행
      // 리소스 = ftp_ssl_connect(접속 호스트, 접속포트, 서버 접속시간)
      
if(false === ($ftp_conn = @ftp_ssl_connect(
        $data
['inputhost'], $data['port'], $data['time'
]))){
           exit(
"보안 접속이 정상적이지 않습니다."
);
      }
 
// 일반 접속시 실행
 // 리소스 = ftp_connect(접속 호스트, 접속포트, 서버 접속시간)
 
} else if (false === ($ftp_conn = @ftp_connect(
          $data
['inputhost'], $data['port'], $data['time'
]))) {
      exit(
" 접속이 정상적이지 않습니다."
);
 }

 
// FTP 로그인 테스트
 
$ftp_login false
;
 
// ftp_login(리소스, 접속아이디, 접속패스워드)
 
if(false === ($ftp_login = @ftp_login(
   $ftp_conn
,$data['inputid'],$data['inputpass'
]))) {
      exit(
"FTP 로그인에 실패하였습니다."
);
 }


 
// 아이디, 패스워드 세션 생성
 
if($ftp_login === true
){
      
session_start
();

      
// 호스트, 아이디, 패스워드, 접속포트 저장
      
$_SESSION['ftp_host'] = base64_encode($data['inputhost'
]);
      
$_SESSION['ftp_id']   = base64_encode($data['inputid'
]);
      
$_SESSION['ftp_pass'] = base64_encode($data['inputpass'
]);
      
$_SESSION['ftp_port'] = base64_encode($data['port'
]);

      
// 보안 접속시 필요합니다.
      
$_SESSION['ftp_ssl'] = base64_encode($data['ssl'
]);
  
      
// bool ftp_pasv ( resource $ftp_stream , bool $pasv )
      // passive mode 접속시 필요합니다.
      
if($data['pasv'] === "y"
){
           
$_SESSION['ftp_pasv'] = base64_encode($data['pasv'
]);
      }
 }

 
// ftp 연결 종료
 
if(is_resource($ftp_conn
)){
      
ftp_close($ftp_conn
);
 }

 echo 
"<pre>"
;
 
print_r($_SESSION
);

 
?>