본문 바로가기
프로그래밍/PHP

파일 전송 인터페이스 만들기

by 백룡화검 2008. 10. 16.
출처 : http://pgmer.com/pooh/30


파일 전송 인터페이스 만들기
FTP는 아주 오래된 프로토콜이지만 아직도 많은 프로젝트에서 사용되는 범용적인 프로토콜이다. 애플리케이션이 현재처럼 개발되지 않았을 시에는 콘솔에서 일일이 로그인하는 과정과 검색 및 업/다운을 진행했지만 요즘에는 그런 명령어조차 기억할 필요없을 정도로 편한 인터페이스가 많이 개발되었다. FTP는 프로젝트에서 데이터의 이중 백업이나 파일의 이동을 필요로 하는 기능을 구현하는데 유용하다. 가장 기본적인 FTP 프로토콜 아키텍처는 로그인→디렉토리찾기→파일찾기→업로드(다운로드)→로그아웃 과정이다. PHP에서는 간단하게 몇 줄만으로 이 과정을 프로그래밍할 수 있다. 다음의 코드를 보자.

<?



$connect = ftp_connect ("시스템아이피","21");

ftp_login( $connect, "아이디", "패스워드");

ftp_chdir($connect,"찾아갈 디렉토리명");

ftp_get($connect, "로컬경로/파일명","원격경로/파일명" , FTP_BINARY);

ftp_close($connect);



?>

이처럼 간단히 5줄의 코딩으로 파일을 가져오는 프로그램을 만들 수 있다. 하지만 웹상의 서버에서 운영되는 프로그램의 특징으로 에러가 나타나는 경우가 아주 많다. 실제 성공률에 대한 보장도 고려해야 한다. 무엇보다 에러 핸들링이 중요하다는 것을 프로젝트를 진행하면서 자주 느끼게 될 것이다. 다음의 코드처럼 보정하여 에러 처리에 대한 루틴을 강화하도록 하자.

<?

$connect = ftp_connect("시스템아이피“,”21“);



// 아이디와 패스워드를 통한 로그인 체크

$login_result = ftp_login($connect, "아이디“, ”패스워드“);



// 연결 체크

if ((!$connect) || (!$login_result)) {

echo "FTP 연결이 실패하였습니다";

echo "시스템 아이피 및 로그인 정보를 확인하십시오";

exit;

} else {

echo "로그인에 성공하였습니다.";

}



//파일 업로드일 경우

$process = ftp_put($connect, "원격경로/업로드파일명","로컬경로/업로드파일명", FTP_BINARY);

//다운로드일 경우

$process = ftp_get($connect, "로컬경로/파일명","원격경로/파일명", FTP_BINARY);



// 업로드 다운로드 체크

if (!$process) {

echo "FTP 처리가 실패하였습니다";

//----> 실패에 대한 처리 루틴

//<---- db나 설정 파일에 대한 처리

} else {

echo "FTP 처리가 성공하였습니다";

}



// FTP 스트림 닫기

ftp_close($connect);

?>

필자가 가장 많이 경험한 것은 실제 파일 업로드가 웹에서 잘 진행되지 않는 점이었다. 이것은 네트워크 속도 및 PHP 파서의 실행 시간과 관련이 높다. 실제 안정적으로 프로그램을 구현하기 위해서는 웹 서버의 속도 보정과 PHP 파서의 실행시간(기본 30초로 설정되어 있음)을 늘려주는 것도 FTP를 안정적으로 진행할 수 있게 한다. 요즘 각 회사마다 네트워크 구성을 보면 기본적으로 FTP를 막아 놓은 곳이 많다. 기본적인 21번 FTP가 막혀 있을 때는 HTTP를 이용한 파일 업로드 기법을 추천한다.
태그에 ENCTYPE=‘multipart/form-data’의 속성을 추가해 주면 파일 업로드가 가능하다는 것을 독자들도 익히 알고 있을 것이다. 만일 업로드 용량 부족 같은 문제가 발생할 때 PHP.ini의 설정 파일에서 다음과 같이 처리하면 post로 넘기는 데이터의 양을 조절할 수 있다.

; Maximum size of POST data that PHP will accept.
post_max_size = 8M

잠시 유의해야 할 점은 앞의 설정은 POST로 값을 보낼 때의 허용된 용량을 말하는 것이다. 다시 말해 클라이언트(웹 브라우저)에서 넘길 수 있는 POST의 MAX 용량을 말하는 것이다. 이것은 텍스트 데이터가 될 수도 있고, 바이너리도 될 수 있다. 이와 달리 서버의 temp로 업로드될 수 있는 용량을 설정하는 부분도 있다. PHP.ini 파일에서 [File Upload] 섹션 부분을 살펴보면 다음과 같이 설정되어 있다. 이것을 조절하면 업로드 용량을 조절할 수 있다.

; Maximum allowed size for uploaded files.
upload_max_filesize = 5M