출처 : 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를 이용한 파일 업로드 기법을 추천한다.
파일 전송 인터페이스 만들기
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를 이용한 파일 업로드 기법을 추천한다.
'프로그래밍 > PHP' 카테고리의 다른 글
[정보] HTTP/1.1 METHOD 의 종류와 아파치에서의 제어 (0) | 2008.10.16 |
---|---|
[펌]PHP socket을 이용한 파일 전송 (0) | 2008.10.16 |
PHP 코드를 최적화하는 40가지 팁 (0) | 2008.08.21 |
[함수] 본문에서 주민번호 패턴 찾아내기... (0) | 2008.08.12 |
PHP에서 유동변수(?) 사용하기 (0) | 2008.07.30 |