수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694438
  • Today | 183
  • Yesterday | 606

Programming/PHP2006/01/26 12:12

PHP 네트워크 프로그래밍 - 1

신현삼 (sami@digitalonnet.com )

프로젝트를 진행하다 보면 네트워크 연동은 필수적이다. 웹 기반의 인트라넷 프로젝트가 많아지면서 PHP도 많은 네트워크 인터페이스 연동을 요구받게 된다. PHP는 일반 웹 프로그래밍 언어보다는 좀더 많은 네트워크 인터페이스를 제공한다. 물론 뛰어난 성능을 검증하자는 의도는 아니지만 PHP 엔진 개발자들은 PHP의 확장력에 많은 투자를 했다고 평가하고 싶다. 굳이 4GL이나 C로 인터페이스를 처리하기보다는 단순 인터페이스는 PHP에서 처리하는 게 개발 측면에서 훨씬 유용하다. 이번 호에서는 이처럼 PHP가 제공하는 다양한 네트워크 프로그래밍을 살펴보겠다.


네트워크 프로그래밍은 서버간의 연동, 서버와 클라이언트간의 연동을 자유롭게 보장해 줄 수 있는 거의 유일한(?) 수단으로 꼽히고 있다. 대형 프로젝트나 사이트에 투입되면 대개 TCP/IP나 UDP 연동에 대한 제안을 받게 된다. 많은 프로젝트를 진행하면서 느낀 점은 아주 기본적인 원칙(전제)이 시스템간의 유연하고 견고한 인터페이스를 만든다는 것이다. 이러한 인터페이스가 기본이 되어야만 이후 유저 인터페이스 및 통계 자료에 접근할 수 있다는 것이다. 기본적인 데이터가 축적되지 않으면 데이터를 응용하는 응용 프로그램을 개발하기 어렵듯이 각종 프로젝트들은 다양한 시스템과의 연동을 필요로 한다. 이런 관점을 잘 이해하고 PHP로 접근할 수 있거나 해결할 수 있는 방법을 익혀두어서 프로젝트에 유용하게 사용했으면 한다.

실제로 필자는 프로젝트에서 이런 인터페이스를 잘 이해하지 못한 덕분(?)에 서로 다른 프로그래밍 언어로 개발함으로써 시간을 지연시키거나 전체 시스템 구성도를 깔끔하게 그리지 못한 경우가 있었다. 프로그래밍 언어를 가리지 않는 것만큼 자신이 사용하고 있는 프로그래밍 언어를 잘 사용하는 것도 개발 시간 및 구성에서 많은 효율성을 준다. 이번 호에서는 FTP를 이용한 파일 업로드 핸들링, SMTP를 이용한 메일 전송, 소켓을 이용한 TCP/IP, UDP 프로그래밍, SNMP(Simple Network Management Protocol)를 이용한 시스템 모니터링 등을 소개고자 한다. 복잡하고 정교한 프로그램보다는 간단한 아키텍처에 기반한 애플리케이션을 만들어 봄으로써 이후 다른 곳에 응용할 수 있는 예제로 다루겠다.

파일 전송 인터페이스 만들기
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
"PHP" 카테고리의 다른 글
  • PHP Framework (0)2007/12/07
  • PHP 최적화하기 - 2 (0)2006/01/26
  • PHP 최적화하기 - 1 (0)2006/01/26
  • PHP 네트워크 프로그래밍 - 3 (0)2006/01/26
  • PHP 네트워크 프로그래밍 - 1 (0)2006/01/26
2006/01/26 12:12 2006/01/26 12:12
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1671

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 1509 1510 1511 1512 1513 1514 1515 1516 1517 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 아바타
  • 중복실행방지
  • DB2
  • Modeling
  • 장르
  • Kprobes
  • 영어
  • TCP/IP
  • 컴퓨터과학과
  • 헤네지 XO
  • 양주
  • 알고리즘
  • Multidimensional
  • C#
  • EnumDisplaySettings
  • 필수품
  • 소스 코드 공유
  • 파일 시스템
  • Override
  • Sun

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.