24'C 구름 많음
서울 강남구
일반적인 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"> 하보니 Log in ...
<tr>
<td colSpan="2"> Connect to FTP Server
<tr>
<td> Server
<td>
<input type='text' name='inputhost' value='' />
<tr>
<td> User
<td>
<input type='text' name='inputid' />
<tr>
<td>
Password
<td>
<input type='password' name='inputpass' />
<tr>
<td> Port
<td>
<input type='text' name='port' size='4' value='21' />
<input type='checkbox' name='ssl' value='y' />SSL-ftp
<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);
?>