PHP 개발자를위한이클립스이클립스에서 PHP 개발하기 IDE 의묘미는디버깅이다. 텍스트에디터에서지나친에러를잡아내어알려준다. 이클립스에서 PHP 프로그래밍을할때도이같은묘미가느껴진다. 지난시간에이어 PHP 실행관련추가내용과디버깅을위한설정, 웹서버연동등 IDE 로활용하기위한방법을알아본다. 스텝 5 바이스텝 연재순서 1 회 2007. 1 PHP 프로그래밍을위한이클립스 2 회 2007. 2 이클립스에서 PHP 개발하기 연재가이드운영체제 윈도우, 리눅스, 유닉스, 매킨토시등자바가능한 GUI 플랫폼개발도구 자바 SE 1.5 이상, 이클립스 3.1 이상, PHP, DBG, XAMPP 기초지식 PHP 프로그래밍응용분야 PHP 웹애플리케이션개발 용영환 xenonix@gmail.com 컴퓨터를처음으로사주셨던부모님, 리눅스 CD를건네주었던친구, 오픈소스를알게해준후배, 옆에서한결같은모습으로바라보는여자친구에게항상고마운마음을갖고있다. 태터툴즈에서개발자로근무하는청년으로정보와기술은공유또는공개되어야한다고믿는다. PHP 실행환경변수를지정하여실행하기하나의웹게시판이있다고가정하자. 웹게시판목록에서게시물을선택하면웹브라우저는웹서버로선택한게시물번호를전송한다. PHP 프로그램은웹서버를통해입력받은게시물번호를데이터베이스에서검색한뒤찾은정보를 HTML 형식으로웹브라우저에전송한다. 게시판뿐만아니라웹기반프로그램은이런방식으로데이터를교환한다. 이클립스에서환경변수를지정하여웹브라우저를통해데이터를입력하는것과동일하게프로그램을실행시킬수있다. QUERY_STRING은 GET 방식으로입력받은값을갖는환경변수다. 이환경변수의값은 PHP에서 $_REQUEST, $_GET, $_POST 등으로도가져올수있다. QUERY_STRING을이클립스에서입력하려면메뉴 Run->Run 창을띄우면된다 (< 화면 2> 참조 ). PHP DBG Script에서실행할프로그램을선택하고, < 화면 2> 오른쪽영역의탭메뉴중 4번째 Environment를선택한다. CGI-Vars를클릭하면환경변수선택창이열린다 (< 화면 3> 참조 ). QUERY_STRING[] 을선택하고 OK를클릭하면환경변수지정목록에 QUERY_STRING이추가된다. 목록에서 QUERY_STRING을선택하고 Edit 버튼을클릭한다. Value에 필자메모 이클립스를실행하는운영체제가한글윈도우라면이클립스의기본인코딩은 MS949이다. 자바의경우 UTF-8을많이사용하지만 PHP는여전히 EUC-KR을주로사용하므로한글윈도우환경이면 EUC-KR로작성된소스코드를편집하는데문제가없다. 그런데영문윈도우는이클립스의기본인코딩이 Cp1252다. Cp1252는 Western Alphabet 인코딩이라한글이제대로표현되지않는문제가있다. 한글인코딩이가능하게하는데두가지방법이있다. 윈도우제어판 Regional Options( 국가및언어옵션 ) 에서 Locale을 Korea로변경하거나이클립스메뉴 Window->Preferences 에서 General->Workspace 의 Text file encoding을 Other로변경하고 MS949 를직접입력하는방법이다. 이전버전의이클립스는인코딩설정항목이 General ->Editors 에있다. < 화면 1> 인코딩설정화면 330 m a s o
이클립스에서 PHP 개발하기 name=value&name=value와같은형식으로원하는값을입력하면웹브라우저에서입력받는것처럼 $_GET 값을얻을수있다 (< 화면 4> 참조 ). 이외에도원하는임의값을지정할수있다. [ 항목 1] 은 < 화면 2> 의버튼에대한설명이다. < 화면 5> Standard Input and Output 설정화면 디버깅프로그램의오류를찾아수정하는것을디버그 (debug) 라고하며, 디버그하는작업을디버깅이라고한다. 웹프로그램은스크립트라는특성상소스코드를읽어가며분석하여디버깅을한다. 이방법은소스코드가복잡해질수록디버깅이어려워지는단점이있다. < 화면 2> 환경변수지정목록화면 [ 항목 1] 환경변수지정목록버튼설명 - New : 새로운환경변수를만든다. - CGI-Vars : 웹서버를통해입력받는기본적인환경변수를지정한다. - Select : 이클립스에서제공하는시스템의환경변수를선택하여지정한다. < 화면 3> 환경변수선택화면 디버깅을위한준비 PHPEclipse는 DBG라는 PHP 디버거의도움을받아이클립스에서 PHP 프로그램을디버깅할수있는환경을제공한다. DBG는 http://dd.cron.ru/dbg/ 에서상용버전과무료버전두가지로배포되고있다. < 표 1> 은 DBG 버전에대한 PHP 버전설명이다. DBG 버전지원하는 PHP 버전 DBG 3.1.6( 상용 ) 4.3.0 ~ 4.4.4 5.0.0 ~ 5.1.6 DBG 2.15.1( 무료 ) 4.0.6 ~ 4.4.2 5.0.0 ~ 5.1.2 < 표 1> DBG 버전별 PHP 지원버전 최신무료버전인 DBG 2.15.1은 64 비트환경을지원하지만, 소스코드형태로만제공되어직접컴파일을해야한다. 여기서는바이너리형태로제공되는무료버전인 DBG 2.13.1을설치한다. < 표 1> 을참고하여설치된 PHP 버전에맞은 DBG를설치하자. 필자의개발환경 < 화면 4> QUERY_STRING 환경변수에값을지정하는화면실행결과를파일로저장하기실행한결과에 HTML이포함된경우콘솔창에서결과를확인하기가어렵다. 이럴땐이클립스에서 PHP 프로그램을실행하여얻은결과를파일로저장하고확인할수있다. 메뉴 Run- >Run 창을띄운다. 실행할프로그램을선택하고탭메뉴의 Common을선택한다. Standard Input and Output에서 File을선택하고결과를저장할파일명을입력한다. Append 옵션은파일을덮어쓰지않고결과를이어서저장한다 (< 화면 5> 참조 ). - 윈도우XP - 이클립스 3.2.1 - PHPEclipse 1.1.8 - PHP 5.1.2(Windows binary), http://kr.php.net/releases.php - DBG 2.13.1(DBG 2.13.1 dbg modules) http://dd.cron.ru/ dbg/downloads.php DBG 설치내려받은 DBG 파일의압축을푼다. 폴더를열면 i686 폴더안에 php_dbg.dll-x.x.x라는파일이있는데뒤에숫자는 PHP 버전을의미한다. 설치된 PHP 버전에맞는 DBG를찾아 PHP가 m a s o 331
스텝바이스텝 5 설치된 (ext 또는 extenstion) 폴더에복사한후 php_dbg. dll로파일명을변경한다. PHP에 DBG 모듈을추가해야한다. 만약 php.ini 파일이없다면 PHP 폴더에 php.ini-dist 파일또는 php.ini-recommended 파일중하나를 php.ini으로파일명을변경하면된다. php.ini 파일을열어 implicit_flush를찾아값을 On 으로변경하고 extension_dir의값을 PHP Extension 폴더의경로로변경한다 (< 리스트 1> 참조 ). PHP 4는확장모듈의폴더가 extension 으로되어있다. 그리고 php.ini 마지막에 < 리스트 2> 의내용을추가한다. implicit_flush 옵션은 print() 와 echo(), HTML을만났을때 flush() 함수를호출하여 PHP의출력버퍼내용을전송하도록한다. < 리스트 1> php.ini 변경내용 implicit_flush = Off ==> implicit_flush = On extension_dir = "./" ==> extension_dir = "./ext/" < 리스트 2> php.ini 추가내용 extension = php_dbg.dll debugger.enabled = on debugger.profiler_anabled = on debugger.jit_host = clienthost debugger.jit_port = 7869 이제 DBG가제대로등록되었는지확인해야한다. 이클립스를실행하고파일을하나생성해 < 리스트 3> 의코드를입력한다. 실행한다음콘솔영역에 < 화면 6> 처럼 DBG 등록정보가나타나면정상적으로설치가완료되었다. 디버깅을위한파일생성디버깅을위해 debugging.php라는파일을생성하고 < 리스트 4> 의소스코드를입력한다. 이소스코드는매우간단하지만디버깅을통해실행과정에서변수값의변화를보여준다. < 리스트 4> Debugging.php 파일소스코드 <?php $strname = "Eclipse"; $intcount = 1000; $arrinfo['name'] = $strname; $arrinfo['count'] = $intcount; $arrresult = $arrinfo; echo "End..."; exit();?> Debug Perspective로전환 Debugging.php 파일을생성하였다면메뉴 Window -> Open Perspective 에서 Debug를선택하여디버깅을위해 Debug Perspective로전환한다. Debug Perspective는 PHP Perspective와다르게구성되어있다. < 화면 7> 은 Debug Pers pective로전환한화면이고 [ 항목 2] 는 Debug Perspective에대한설명이다. < 리스트 3> phpinfo() 소스코드입력 <?php phpinfo();?> < 화면 7> Debug Perspective 로전환한화면 [ 항목 2] Debug Perspective 화면설명 < 화면 6> phpinfo() 결과에 DBG 정보가출력된화면 - Debug : 디버그프로세스를보여준다. - Variables : 실행과정의 PHP 변수에대한정보를보여준다. - Breakpoints : Breakpoint로지정된위치정보를보여준다. 332 m a s o
이클립스에서 PHP 개발하기 디버그설정여기까지진행되었다면이제디버깅을위한디버그설정을해야한다. 이과정은 PHP 프로그램을실행 (Run) 하는과정과비슷하다. 메뉴 Run->Debug 를선택하면디버그설정창이열린다. 화면왼쪽 PHP DBG Script 를마우스오른쪽버튼으로클릭하고 New를선택한다. < 화면 8> 과같은화면이나타난다. 항목이이미채워져있을것이다. Name 항목은설정에대한고유이름이니원하는이름으로변경한다. 그리고탭메뉴의 3번째 Environment를이동한다. < 화면 9> 와같이 PHP 인터프리터를선택하는화면이나타난다. 이미지정했던 PHP 인터프리터가선택돼있으면, DBG는 PHP 인터프리터가 CGI 상태로구동돼야동작한다. 만약 PHP 인터프리터가콘솔구동파일인 php-win.exe(php 4의경우 cli/php.exe) 가선택되어있다면, CGI 구동방식인 php-cgi.exe로변경한다. PHP 4의경우엔 PHP 폴더바로아래에있는 php.exe를선택한다. Apply를클릭하여저장하고 Debug를실행해보자. < 화면 10> 은 Debug를실행했을때 Debug 영역에타나난결과이다. 프로그램이정상적으로종료되었음을의미한다. Breakpoint 지정프로그램을디버깅하기위해서는소스코드의어디서부터디버깅할것인지 Breakpoint를지정해야한다. Breakpoint는프로그램이실행되는과정에서디버깅을위해실행을일시정지하는위치를말한다. 디버그가되지않을경우는 Breakpoint를지정하지않아서다. 프로그램이멈추지않고끝까지실행됐기때문이다. Breakpoint를지정하려면소스코드를편집할수있는 Edit 영역의왼쪽모퉁이를마우스왼쪽버튼으로두번클릭하거나마우스오른쪽버튼을클릭하여 Toggle PHP Break point 를선택하면된다. Breakpoint가지정되면동그란점이표시된다. < 화면 11> 은 Breakpoint를지정한화면이다. Break point는하나이상지정할수있으며지정된 Breakpoint는지정방법과동일하게해제할수있다. < 화면 11> < 리스트 4> 의소스코드에 Breakpoint 를지정한화면 < 화면 8> Debug 설정화면 디버깅하기 Debug를실행해보자. 이전과는다른결과가각영역에나타난다. < 화면 12> 의 Debug 영역을보면프로그램이 3번째줄 Breakpoint에서일시정지되어있다는것을알수있다. Varia bles 영역에는이시점에서 PHP 프로그램이갖고있는상수와변수에대한정보가나열되어있다. Variables 영역의항목을펼쳐보면웹서버상수, PHP 상수, 프로그램에서선언한변수등이있다 (< 화면 13> 참조 ). 이상태에서프로그램을한줄씩진행하면서디버깅하면된다. < 표 2> 는 Debug 영역의버튼에대한설명이다. 동일한디버그실행을반복하려면 < 화면 14> 의버튼을클릭하여실행한다. < 화면 9> Debug 설정창의 Environment 화면 < 화면 10> Debug를실행했을때 Debug 영역화면 < 화면 12> Debug 실행후 Debug 영역화면 < 화면 13> Variables 영역화면 Resume Breakpoint가있는위치까지프로그램을진행한다. Terminate 프로그램의실행을중단한다. Step Into 멈춰있는다음줄로진행한다. 만약함수가있다면함수안으로이동한다. Step Over 멈춰있는다음줄로진행한다. 함수안으로이동하지는않는다. Step Return 함수실행을완료하고함수밖으로나온다. < 표 2> Debug 버튼설명 m a s o 333
스텝바이스텝 5 - phpmyadmin 2.8.0.3 < 화면 14> Debug 실행버튼 웹서버와연동 PHP 프로그램은웹프로그램특성상웹서버에서실행해야제대로동작하고, 그결과를볼수있는경우가대부분이다. 물론이클립스에서 PHP 프로그램을만들고실행하는단계까지는문제가없다. 실행후콘솔영역에출력되는복잡한 HTML, 전혀알수없는결과값이나타나면허탈할뿐이다. 그래서여전히작성한소스코드를웹서버에전송한후실행시키는개발과정을되풀이하는것이다. PHPEclipse는작성한프로그램을웹서버와연동하여실행할수있다. 지난호에서 PHP Browser 영역에대한설명을미루며기능을비활성화했었다. PHP Browser 영역을통해이클립스에서웹서버의결과를볼수있다. 준비하기 PHP가실행되는웹서버가필요하다. 여기서는가장많이사용하는웹서버아파치를기반으로무료인 XAMPP을사용한다. XAMPP는아파치웹서버,MySQL 서버, FTP 서버, 메일서버등을쉽게설치할수있도록만들어진패키지프로그램이다. XAMPP는 http://www.apachefriends.org/en/xampp.html 에서받을수있다. XAMPP의최신버전은 1.5.5이며이안에는 PHP 5.2.0과 PHP 4.4.4 버전이들어있다. 그러므로우리가설치했던 DBG 2.13.1이지원하는 PHP 5.1.2와 PHP 4.4.2로구성된 XAMPP 1.5.2를설치한다. XAMPP의이전버전은 http: //sourceforge.net/project/showfiles.php?group_id=61776&p ackage_id=89552에서내려받을수있다. 여기서는 xamppwin32-1.5.2-installer.exe를사용한다. [ 항목 3] 은 XAMPP 1.5.2 패키지내용이다. - ADOdb 4.80 - Mercury Mail Transport System v4.01b - FileZilla FTP Server 0.9.14a - Webalizer 2.01-10 - Zend Optimizer 3.0.0 설치하기내려받은 XAMPP 파일을실행하여설치한다. XAMPP는설치과정부터한글을지원하므로어렵지않게설치할수있다. 설치가완료되면 Apche, MySQL, FTP를서비스에대한등록여부를묻는다 (< 화면 15> 참조 ). 서비스에등록하게되면, 아파치와 MySQL이제대로실행되지않는경우가발생할수있으니등록하지않도록한다. 그런데 Filezilla FTP 서버는서비스에등록해야하므로 XAMPP 컨트롤패널에서 Svc를선택하여등록한다. < 화면 16> 은 XAMPP 컨트롤패널화면이다. XAMPP 컨트롤패널에서아파치를 Start한후웹브라우저에서 http:// localhost 로접속한다. < 화면 17> 과같은화면이나오면정상적으로설치된것이다. < 화면 15> 서비스등록물음화면 < 화면 16> XAMPP 컨트롤패널화면 [ 항목 3] XAMPP 1.5.2 - Apache 2.2.0 - MySQL 5.0.20 - PHP 5.1.2 + PHP 4.4.2-pl1 + PEAR - eaccelerator 0.9.4-rc1 (not stabil with PHP 5.1.2) - PHP-Switch win32 1.0 (von Apachefriends, man nehme die php-switch.bat ) - XAMPP Control Version 2.2 from www.nat32.com - XAMPP Security 1.0 - SQLite 2.8.15 - OpenSSL 0.9.8a < 화면 17> XAMPP 이설치된화면 XAMPP는기본적으로 C:\Program Files\xampp에설치된다. xampp 폴더안에는각서버의실행파일과설정파일이존재한다. 이클립스와연동하기위해서는우선아파치웹서버의 334 m a s o
이클립스에서 PHP 개발하기 설정파일 ( 기본위치 : C:\xampp\apache\conf\httpd.conf) 을열고 DocumentRoot의값을이클립스의 Workspace 폴더위치로변경한다. 그리고 <Dicrectory> </directory> 값도변경해야한다. < 리스트 5> 는 httpd.conf 안에서변경할내용이다. < 리스트 5> XAMPP 아파치웹서버의 httpd.conf 변경내용 DocumentRoot "C:/Program Files/xampp/htdocs" => DocumentRoot "C:/workspace" ( 이클립스에서지정한 workspace 경로 ) <Directory "C:/Program Files/xampp/htdocs"> => <Directory "C:/workspace"> ( 이클립스에서지정한 workspace 경로 ) 이클립스설정하기이클립스로돌아와메뉴 Window->Preferences 창에서 PH PEclipse Web Development->Browser Preview Defaults 를선택하여두개의항목을활성화한다. 만약기본 workspace가아닌별도의경로에서작업하려한다면웹서버의 Document Root를해당폴더경로로지정한다. 그리고이클립스에서 Navi gator 영역의프로젝트이름을마우스오른쪽버튼으로클릭하여 Properties 창을열고 PHP Project Settings에서 Use pro ject settings 로변경한다. Localhost에는웹서버의 URL을입력하고 DocumentRoot에원하는작업경로를지정하면된다. < 화면 18> 은프로젝트에대한 workspace와웹서버 URL을변경하는화면이다. 여기까지완료하고편집화면으로돌아가면 < 화면 19> 처럼 PHP Browser에결과가나타난다. 웹서버와 DBG 연동하기이클립스의 PHP Browser는내장된웹브라우저이다. 이웹브라우저를통해웹서버에서 PHP 프로그램이실행된 결과를볼수있다. 이클립스의원격디버그기능을이용하면웹서버에서실행되는 PHP 프로그램을디버깅할수있다. XAMPP 1.5.2 를설치한이유도 DBG를연동하기위해서다. 웹서버에 DBG를설치하는방법은 DBG 설치와비슷하지만약간의차이가있다. php_dbg.dll_5.1.2 파일을 XAMPP의 php/ext 폴더에복사한후 php_dbg.dll로파일명을변경한다. ext와 extension 두개의폴더가있는데, PHP 5에서는 ext 폴더를사용한다. XAMPP의 apache/bin 폴더에있는 php.ini를열고앞에서설명한 < 리스트 1, 2> 처럼변경한다. 아마 exten sion_dir은경로가올바르게지정되어있을것이다. 그런데여기서주의할것이하나있다. DBG는 eaccelerator나 Zend Optimizer가활성화되어있는경우사용할수없다. XAMPP의 PHP는기본적으로 Zend Optimizer가활성화되어있으므로, php.ini에서 [Zend] 항목을찾아모두주석처리한다. < 화면 20> 은 php.ini에서 Zend Optimizer를비활성화한화면이다. php.ini를저장하고다시아파치웹서버를시작한다. phpinfo() 를실행해 DBG가정상적으로설치되었는지확인한다 (< 화면 21> 참조 ). < 화면 20> php.ini 에서 Zend Optimizer 를비활성화한화면 < 화면 18> 프로젝트 workspace 설정화면 < 화면 19> PHP Browser 에결과가출력된화면 < 화면 21> DBG 가설치된화면 342 쪽에서계속 m a s o 335