일반적인 ftp기능을 php로 구현이 가능하며, 실제 운영에도 정보공유나 파일 분산작업이 가능하여 많이 사용되는 기능입니다.

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


FTP 로그인을 위한 폼이 필요합니다. 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);
 ?>

0 댓글