ASP 기본문법과 함수들

1. 대소문자의 구분

asp 에서는 다른 언어와는 달리 대소문자의 구분이 없다. 그냥 단지 알아보기 쉽게 하기 위해서 대소문자를 사용하는 것이다.

예) dim strname 는 Dim strName 과 같은 구문이다.


2. 변수 선언

- 변수나 배열의 변수 선언에는 dim 을 사용한다.

- Option Explicit 를 asp 맨 앞에 사용하여 변수를 꼭 선언하도록 하였으면 모든 변수는

dim 으로 선언하여 사용하여야한다.

예) 변수 선언 : dim strName, strEmail

배열 선언 : dim monthArry(11)

- Redim : 배열 크기의 재선언에 사용한다.

redim 의 사용은 처음 배열 선언시에 배열의 크기를 정해 주지 않았을 때에만 가능하다.

- Preserve : 데이터를 저장한 채로 배열의 크기를 늘려준다. 즉, 기존의 들어가 있는 데이터는 그대로 아직 존재한다.




3. 구분자
- 구분자로는 :(콜론) 이 쓰인다.
- 구분자는 실행할 문장을 한줄단위로 구분짓는 역할을 한다.
예) dim strName : strName = "mshout77" : response.write "
strName = " & strName





4. 연결연산자
- &
- &가 문자열에 쓰이면 문장과 문장을 연결해서 한 문장으로 만들어준다.
- &가 변수에 쓰이면 변수의 값을 & 다음의 값과 이어준다.
- 예) dim strName, strFName, all

strName = "77"

strFName = "mshout"

all = strName&strFName



response.write all

결과값은 mshout77 이라고 출력된다.





5. 주석
- ASP에서 주석처리에는 '(작은 따옴표) 가 쓰인다.
- 행에서 ' 다음의 내용은 주석처리되어 해석이 되지 않는다.




6. 함수
1) cdbl(문자열) - 문자열을 소수점이하까지도 출력(큰 숫자에 사용한다)


2) round(숫자,반올림할 위치) - 지정한 소수점 자리에서 반올림한 값을 리턴


3) asc(문자열) - 문자열에서 첫번째 문자에 대한 ansi 코드 번호를 리턴


4) chr(아스키코드번호) - 지정된 번호와 일치하는 ansi 문자로 구성된 문자열을 리턴


5) hex(숫자) - 숫자의 16진수값을 나탸내는 문자열을 리턴


6) fix(숫자) - 숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 크거나 같은 첫번째 음의 정수 리턴


7) int(숫자) - 숫자의 정수(전체)부분을 리턴 / 음수일때 숫자보다 작거나 같은 첫번째 음의 정수 리턴


8) sgn(숫자) - 숫자의 부호를 나타내는 정수를 리턴


9) cdate(숫자) - 날짜 형식의 인자값 리턴( 예:cdate(36890) , cdate("2001년 12월 10일") )


10) Clng(숫자) - Long 형식의 문자열 리턴


11) Cstr(숫자) - String 형식의 문자열 리턴


12) Csng(숫자) - Single 형식의 문자열 리턴


13) formatcurrency(숫자) - 숫자를 화폐형식으로 전환


14) formatdatetime(date,1) - date 함수의 표시형태를 바꿈
- formatdatetime(date,2)
- formatdatetime(date,3)


15) formatpercent(숫자) - 숫자를 백분율로 표시


16) strConv - 지정한대로 문자를 변환, strConv(문자열,conversion [,LCID])
conversion 에 가능한 값
- vbUpperCase 1 문자열을 대문자로 변환
- vbLowerCase 2 문자열을 소문자로 변환
- vbPropercase 3 문자열 단어의 첫글자를 대문자로 변환
- vbWide 4 1바이트문자를 2바이트 문자로 변환
- vbNarrow 5 2바이트문자를 1바이트문자로 변환
- vbUnicode 6 시스템의 기본 코드 페이지를 사용하여 문자열을 unicode 로 변환
- vbFromUnicode 128 unicode 문자열을 시스템의 기본 코드 페이지로 변환


17) Randomize - 난수 발생기를 초기화
- 난수값 = Int((상한값 - 하한값) + 1) * Rnd + 하한값
- 예로 1부터 100사이의 난수를 가져오려면, 난수값 = Int(100 - 1 + 1) * Rnd + 1


18) Atn() - 숫자의 아크 탄젠트 값을 리턴


19) Cos() - 각도의 코사인값을 리턴


20) Exp() - e(자연 로그의 밑)의 인자만큼의 제곱을 리턴


21) Log() - 숫자의 자연로그를 리턴


22) Sin() - 각도의 사인값을 리턴


23) Tan() - 각도의 탄젠트값을 리턴

24) InStr("문자열","찾을 문자") - 문자열의 위치 반환


25) InStrRev("문자열","찾을 문자") - 문자열의 위치를 뒤에서 부터 검색해서 반환


26) Lcase("문자열") - 문자열을 소문자로


27) Ucase("문자열") - 문자열을 대문자로

28) Len("문자열") -문자열의 길이 반환

29) Left("문자열",잘라낼 갯수) - 문자열을 왼쪽에서 지정한 갯수만큼 잘라냄


30) Right("문자열",잘라낼 갯수) - 문자열을 오른쪽에서 지정한 갯수만큼 잘라냄

31) Mid("문자열",시작위치,뽑아낼 갯수) - 문자열의 어느 부위를 뽑아냄


32) Yrim("문자열") - 문자열의 양쪽 공백을 제거


33) Ltrim("문자열") - 문자열의 왼쪽 공백을 제거


34) Rtrim("문자열") - 문자열의 오른쪽 공백을 제거

35) Split("문자열","분리자") - 분리자를 기준으로 문자열을 나눔

36) StrReverse("문자열") - 문자열을 뒤집음

37) IsArray() - 변수가 배열인지의 여부를 나타내는 Boolean 값을 리턴


38) IsDate() - 날짜로 변환될 수 있는지의 여부를 나타내는 Boolean 값을 리턴


39) IsEmpty() - 변수가 초기화 될 수 있는지의 여부를 나타내는 Boolean 값을 리턴


40) IsNull() - 유효한 데이터를 포함하고 있는지의 여부를 리턴


41) IsNumeric() - 숫자로 평가될 수 있는지의 여부를 리턴


42) IsObject() - 유효한 ActiveX혹은 OLE 자동화 개체를 참조하는지의 여부를 리턴


43) Vartype() - 변수의 하위 형식을 나타내는 숫자를 리턴한다.


44) now - 시스템의 시간과 날짜


45) date - 시스템의 날짜


46) time - 시스템의 시간


47) year(now) - 현재의 년도


48) month(now) - 현재의 월



49) day(now) - 현재의 일


50) weekday(now) - 현재의 요일



51) hour(now) - 현재의 시


52) minute(now) - 현재의 분


53) second(now) - 현재의 초


54) DateAdd - 지정된 날짜에 시간을 추가하거나 뺀 새로운 날짜를 반환
사용법) DateAdd(interval, number, date)
- interval : 필수적인 인수로 interval을 추가한 날짜를 나타내는 문자식

yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초


- number : 필수적인 인수로 추가할 간격 수의 수식
수식에서 양수는 미래의 날짜, 음수는 과거의 날짜이다.


- date : 필수적인 인수로 interval을 추가한 날짜를 나타내는 Variant 또는 리터럴


예) DateAdd("m",3,Date) <-- 현재의 날짜에서 3개월을 더함
DateAdd("m",-3,Date) <-- 현재의 날짜에서 3개월을 뺌


55) DateDiff - 주어지는 두 날짜의 간격을 반환
사용법) DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
- interval : 필수적인 인수로 날짜1과 날짜2 사이의 차이를 계산하는 데 사용할 interval의 문자식

yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초


- date1, date2 : 필수적인 인수로 날짜식에서 계산에 사용할 두 날짜


- firstdayofweek : 선택적인 인수로 요일을 지정하는 상수로 지정하지 않으면 일요일로 간주

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbSunday 1 일요일(기본값)
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일

- firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수
지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다.
vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값)
vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작
vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작


예) DateDiff("h", "2001년 12월 30일", Date)
DateDiff("n", "2001년 12월 30일 09:30:00", now)
DateDiff("s", "2001년 12월 30일 09:30:00", now)

56) DatePart - 주어진 날짜의 지정된 부분을 반환한다.
사용법) DatePart(interval, date[, firstdayofweek[, firstweekofyear]])
- interval : 필수적인 인수로 반환할 시간 간격의 문자식이다.

yyyy 년, q 분기, m 월, y 일(일년 기준), d 일, w 요일, ww 주(일년 기준), h 시, n 분, s 초


- date : 필수적인 인수로 계산할 날짜식



- firstdayof week : 선택적인 인수로 요일을 지정하는 상수로서 지정하지 않으면 일요일로 간주

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbSunday 1 일요일(기본값)
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일


- firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수
지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다.
vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값)
vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작
vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작

예) DatePart("q", now)

57) DateSerial - 지정된 년, 월, 일의 Date 하위 형식인 Variant를 반환한다.
즉, 임의의 숫자를 입력받아 날짜 형식으로 반환하는 함수이다.
사용법) DateSerial(year, month, day)
year : 100에서 9999까지의 수 또는 수식
month : 모든 수식
day : 모든 수식
예) DateSerial(2001, 12, 25)

58) DateValue - Date 하위 형식의 Variant를 반환한다.
사용법) DateValue(date)

예) DateValue("2000년 12월 25일")
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/03/09 10:08 2007/03/09 10:08
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2306

오늘 특별스럽게 이야기를 펼쳐볼 주제는 바로! (두~ 둥)
중급 ASP 프로그래머들이 암암리에 사용하고 있던 바로 그 기술!
ASP에서 클래스를 만들어 사용하는 것에 대한 이야기입니다. 빰빠라밤~

사실, VBScript(ASP에서 일반적으로 사용하는 서버 스크립트)에서도 클래스가 지원된다는 사실을 아시는 분은 그리 많지 않습니다(실은, 스크립트 엔진이 좋아져서 지원되는 것이긴 하지만 ^^).

아니라구요? 이미 알고 있었다구요?

좋습니다. 제가 한발 양보하지요! 하지만, 그 사실을 알고 있었다 해도 클래스를 제작하여 사용하시는 분은 그리 많지 않았을 것입니다.

에? 이미 사용하고 있었다구요? (호오. 고개를 끄덕이시는 조오~기 몇 분! 계속 그렇게 딴지 거시면, 방과 후 옥상에서 개인 면담 들어가는 수가 있습니다)

장내도 정리 되었으니 계속 이야기를 하면 말입니다. ASP에서 클래스를 만들어 사용하는 것은 대단히 단순합니다. VB에서 클래스를 만드는 것처럼 걍 만들어주면 됩니다. 예를 들면, 다음은 오늘의 시간을 반환하는 멋진 기능을 갖춘 클래스입니다. 그냥 보기에도 멋지지 않습니까?

< %
Class clsTimeSvc

private sub Class_Initialize()
'클래스 초기화 시 해야할 작업
End Sub

Public Function GetNow()
GetNow = Now
End Function
End Class
% >


이렇게 클래스를 만들어 두었다면 어떻게 사용하느냐? 일단, 이러한 클래스는 별도의 asp 페이지로 만들어 두시는 것이 관리하기에 좋으니까, 이 코드를 clsTimeSvc.asp 란 파일로 만들어서 웹 사이트(테스트용)의 루트에 두도록 하세요 ^^

그리고, 역시 루트에 다음과 같이 테스트용 asp 페이지를 하나 만듭니다. 저는 파일명을 TimeTest.asp 라고 주어봤습니다. 그리고, 위에서 만든 클래스를 사용하기 위해서는, 일단, 상기 asp 페이지를 인클루드 해주시구요. 마치 VB(언어)에서 일반적인 클래스를 사용하듯이 다음처럼 New 해서 사용하시면 됩니다. 무지하게 간단하죠? 사용이 끝난 다음에는 Nothing 하는 것도 잊지 마셔야겠죠 ^^

< %
Set TimeSvc = new clsTimeSvc
Response.Write(TimeSvc.GetNow())
Set TimeSvc = Nothing
% >


간단하고도 쿨하죠? 그렇습니다. 많은 분들이 그다지 클래스는 사용해 보시지 않았다 할지라도, 필요한 함수(Function)들을 묶어서 하나의 파일로 만든 뒤, 이를 인클루드해서 사용한 경험들은 있을텐데요. 앞으로는 그러한 함수들을 이렇게 클래스로 묶어서 관리하는 것도 좋지 않나 하는 생각입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/01/19 16:12 2007/01/19 16:12
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2220

SOAP 요청 아키텍처

SOAP 요청 아키텍처

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/01/10 20:01 2007/01/10 20:01
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2204

SOAP

SOAP 헤더 사용
SOAP를 사용하여 XML Web services 메서드와 통신하는 작업은 표준 형식을 따릅니다. 이 형식에는 XML 문서로 인코딩된 데이터가 들어 있습니다. XML 문서는 루트 Envelope 태그로 구성되고, 이 태그는 필수적인 Body 요소와 선택적인 Header 요소로 구성됩니다. Body 요소는 해당 메시지와 관련된 데이터로 이루어져 있습니다. 선택적인 Header 요소는 특정 메시지와 직접적인 관계가 없는 추가 정보를 포함합니다.
http://msdn.microsoft.com/library/KOR/cpguide/html/cpconUsingSOAPHeaders.asp

SOAP 확장을 사용하여 SOAP 메시지 변경
SOAP 확장을 사용하면 개발자가 XML Web services나 XML Web services 클라이언트로 보내고 XML Web services나 XML Web services 클라이언트에서 받은 SOAP 메시지를 변경하여 XML Web services의 기능을 확대할 수 있습니다. 예를 들어, 기존 XML Web services를 사용하여 실행되도록 암호화 또는 압축 알고리즘을 구현할 수 있습니다. SOAP 확장이 작동하는 방식을 쉽게
http://msdn.microsoft.com/library/KOR/cpguide/html/cpconAlteringSOAPMessageUsingSOAPExtensions.asp

SOAP 메시지 사용자 지정
ASP.NET을 사용하여 만든 XML Web services와 SOAP를 사용하는 해당 클라이언트가 XML Web services 메서드와 통신하는 경우 서버에 보내거나 서버에서 받는 SOAP 메시지의 형식을 제어하는 데 복잡한 메커니즘을 사용할 수 있습니다. SOAP는 XML Web services에 보내거나 XML Web services에서 받는 SOAP 메시지의 내용이 XML 형식이 되도록 지정하지만 엄격하게 XML 형식을 요구하지는 않습니다.
http://msdn.microsoft.com/library/KOR/cpguide/html/cpconCustomizingSOAPInASPNETWebServicesWebServiceClients.asp

SOAPState 샘플: ATL 서버를 사용하여 영구 SOAP 서버 구현
영구 SOAP 서버를 구현하는 방법을 보여 줍니다. SOAPState 샘플에서는 다음 항목의 사용 방법을 보여 줍니다. CIsapiExtension에 의해 구현된 IServiceProvider 인터페이스 SOAP 헤더 이 샘플에서는 메서드 호출 전에는 SOAP 서버의 상태를 로드하고 메서드 호출 후에는 즉시 상태를 저장하는 메서드를 보여 줍니다. SOAP 서버의 상태는 메모리에 유지됩니다. 이 상태를 데이터베이스나
http://msdn.microsoft.com/library/KOR/vcsample/html/vcsamSOAPStateSample.asp

'Microsoft Magazine' 2000년 6월호 - SOAP II
마이크로소프트 매거진, 2000년 6월호 - 테크트렌드 : 보다 완벽한 해결책 SOAP
http://www.microsoft.com/korea/magazine/200006/techtrend/2.htm

SOAPTransport 샘플: 소켓, MSMQ, 파일 시스템 및 HTTP 수신기를 통해 SOAP 메시지 통신
소켓, Microsoft Message Queue, 파일 시스템 및 사용자 지정 HTTP 수신기 등의 다른 전송 수단을 사용하여 통신하는 SOAP 서버 및 클라이언트를 만드는 방법을 보여 줍니다. SOAPTransport 샘플은 여덟 개의 프로젝트로 구성되며, 지원되는 네 가지 전송 수단에 대해 SOAP 서버 및 클라이언트가 하나씩 있습니다. 이 샘플에서는 ATL 서버에서 제공하는 SOAP 지원을 ISAPI 프레임워크와 구분하고 ATL
http://msdn.microsoft.com/library/KOR/vcsample/html/vcsamSOAPTransportSample.asp

HOWTO: Apache SOAP 2.2 클라이언트를 .NET XML 웹 서비스와 통합
이 문서에서는 Apache SOAP 2.2 클라이언트를 ASP(Active Server Pages) .NET에 기반을 둔 XML 웹 서비스와 통합하는 방법을 단계별로 설명합니다. 이 문서에서 ASP .NET 서버측 구성 요소는 WebMethod 특성과 함께 웹 메서드를 제공하고 웹 서비스 자체에 대해서는 네임스페이스만 제공합니다. 요구 사항 권장하는 하드웨어, 소프트웨어, 네트워크 인프라, 기술과 지식 및 서비스 팩은 다음과 같습니다....
http://support.microsoft.com/default.aspx?scid=kb;ko;308466

SOAP 서버 코드
다음은 ATL 서버 SOAP 특성을 보여 주는 XML Web services용 코드입니다. SOAP 클라이언트 코드 항목에서 이 서버에 대한 클라이언트 코드를 볼 수 있습니다. namespace HelloSoapService { [ uuid(
http://msdn.microsoft.com/library/KOR/vccore/html/vcconatlserversoapservercode.asp

SOAP 서비스
COM+ SOAP 서비스를 사용하면 기존 구성 요소를 가져와서 XML Web services로 게시할 수 있습니다. 클라이언트에서는 이전 메서드를 사용하여 계속 해당 구성 요소에 액세스할 수 있지만 WSDL(Web Service Description Language) 및 SOAP를 사용하여 해당 구성 요소에 액세스할 수도 있습니다. XML Web services 및 WSDL에 대한 자세한 내용은 XML Web services 개요를 참조하십시오.
http://msdn.microsoft.com/library/KOR/cpguide/html/cpconSOAPServices.asp

SOAPDataTypes 샘플: SOAP 서버의 기본 데이터 형식 및 집합체 형식 샘플
SOAP 서버에서 기본 데이터 형식 및 집합체 형식을 사용하는 방법을 보여 줍니다. SOAPDataTypes 샘플에서는 ATL 서버 SOAP 구현을 통해 다음 형식을 전송합니다. 기본 형식 구조체 고정 크기 및 동적 크기 배열(1차원 및 다차원 모두 해당) 구조체 배열 포함된 구조체 포함된 배열 샘플 빌드 및 실행 이 샘플을 빌드하고 실행하려면 Visual Studio 개발
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/01/10 16:32 2007/01/10 16:32
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2203

utf-8 컨버팅 iconv 대신에...

iconv( "utf-8", "euc-kr", $oivsObject->userNm)

mb_convert_encoding($oivsObject->userNm, "euc-kr", "utf-8")


mb_convert_encoding
(PHP 4 >= 4.0.6, PHP 5)

mb_convert_encoding -- Convert character encoding
Description
string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])


mb_convert_encoding() converts character encoding of string str from from-encoding to to-encoding.

str : String to be converted.

from-encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.

예 1. mb_convert_encoding() example

< ?php
/ * Convert internal character encoding to SJIS */
$str = mb_convert_encoding($str, "SJIS");

/ * Convert EUC-JP to UTF-7 */
$str = mb_convert_encoding($str, "UTF-7", "EUC-JP");

/ * Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");

/ * "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
$str = mb_convert_encoding($str, "EUC-JP", "auto");
?>
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/01/08 16:41 2007/01/08 16:41
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2198

확장성 생성 언어(XML)와 하이퍼텍스트 전송 규약(HTTP) 등을 기반으로 하여 다른 컴퓨터에 있는 데이터나 서비스를 호출하기 위한 통신 규약. 마이크로소프트사와 유저랜드 소프트웨어(UserLand Software)사, 디벨롭멘터(Developmentor)사가 중심이 되어 개발하였다. SOAP에 의한 통신에서는 XML 문서에 봉투(envelope)로 불리는 부대 정보가 붙은 메시지를 HTTP 등의 프로토콜로 교환한다. 서비스를 이용하는 클라이언트와 서비스를 제공하는 서버 쌍방이 SOAP의 생성, 해석 엔진을 가지는 것으로 다른 환경 간에서의 객체 호출을 가능하게 하고 있다. SOAP 1.1에서는 실제로 데이터의 송수신에 사용하는 하위 프로토콜은 현재 널리 보급되어 있는 HTTP나 간이 전자 우편 전송 프로토콜(SMTP), 파일 전송 규약(FTP) 등에서 선택할 수 있게 되어 있어 기업 간에 이용하는 경우에도 방화벽 등을 안전하게 통과할 수 있다. 현재 월드 와이드 웹 컨소시엄(W3C)에 의해 표준이 행해지고 IBM, 로터스 등도 자사 제품에서의 대응을 표명하고 있다. 한편, SOAP 메시지의 생성 엔진은 ‘SOAP 프럭시’, 해석 엔진은 ‘SOAP 리스너, SOAP에 의해 외부로부터 이용 가능한 부품화된 웹 기반의 응용 프로그램은 ‘웹 서비스’라고 불린다. 인터넷상에서 각 회사가 제공하고 있는 웹 서비스를 모아 누구라도 검색, 조회할 수 있도록 하는 것이 UDDI이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2007/01/08 13:26 2007/01/08 13:26
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2197

http://elegantcoder.com/blog/entry/PHP를-Eclipse로-개발하기-1-설치편

http://elegantcoder.com/blog/entry/PHP를-Eclipse로-개발하기-2-설정편

국내에 PHP를 시작하는 사람들은 대부분 인터넷 붐을 타고, 홈페이지를 가져보자는 생각에 제로보드부터 시작한 사람들이 대부분인 것같다. (나 또한 그랬으니까..)

국내의 PHP서적들 역시 대부분이 Beginner를 위한 것들이고, 알고리즘이나 개발방법론 등의 고민 없이 연산자 소개부터 함수 레퍼런스로 끝을 맺는 경우가 대부분이다.

그런 서적들이 이야기하는 PHP저작도구는 메모장이나 에디트 플러스, 울트라 에디터, EmEditor 등이다.

이제는 변화를 생각해보자. PHP개발도 IDE를 사용해보자는 것이다.

PHP의 IDE중에는 PHP제작사인 Zend에서 만든 Zend Studio 등이 있지만, 상용이고, 한글지원도 불편해 여기서는 오픈소스 IDE인 이클립스를 사용하기로 한다.

이클립스가 무엇인지는 위키나 각종 검색사이트에서 검색해보면 방대한 자료를 얻을 수 있을 것이다. 이클립스의 태생 등은 논점에서 벗어날 뿐 아니라 필자가 잘 설명해 줄 수 있을정도로 많이 알고 있지도 않다. 따라서 Pass.

순서:
1. 이클립스 다운로드 받기
2. PHP Eclipse다운로드 받기
3. WTP(Web Tools Platform) 다운로드 받기
4. 설치

1. 이클립스 다운로드 받기
이클립스의 공식 사이트는 http://www.eclipse.org 이다.

상단 메뉴에서 Downloads를 하면 최신버젼을 바로 받을 수 있도록 큼지막하게 링크가 걸려있는 것을 볼 수 있을 것이다.

파일을 받을 수 있도록 링크를 클릭하면, 미러링 사이트를 고를 수 있도록 되어 있다. 아마 한국 사이트가 제일 위에 나올 것이다. 선택을 하면 다운로드가 시작된다.

2. PHP Eclipse다운로드 받기
PHP Eclipse 플러그 인은 이클립스에서 PHP를 다룰 수 있게 해주는 플러그 인이다. 가장 중요하다고 할 수 있다. PHPEclipse의 공식 사이트는 http://phpeclipse.de 이다.

http://sourceforge.net/project/showfiles.php?group_id=57621 에서 최신버젼 및 베타버젼도 다운로드받을 수 있다. 우리가 사용할 이클립스의 버젼은 3.1대 버젼이므로 1.1.7 이상 버젼을 다운로드 받으면 된다.

3. WTP(Web Tools Platform) 다운로드 받기
PHP는 주로 웹을 다루는 데에 쓰기 때문에, 개발 중에 HTML이나 CSS를 다룰 일이 많다. WTP는 이클립스에서 HTML, CSS, JavaScript 등을 다룰 수 있게 해주는 플러그 인이다.

http://download.eclipse.org/webtools/downloads/ 에서 다운로드 받을 수 있다.

4. 설치
(1) 이클립스 설치
이클립스에는 별 다른 인스톨러가 지원되지 않는다. 원하는 디렉토리에 압축을 풀어주고, 바탕화면에 단축아이콘을 만들어주는 것 정도로 설치가 끝난다.

(2) PHPEclipse, WTP설치
이클립스 내의 플러그인 관리툴을 이용해 설치하는 방법을 배워보자.
우선 다운로드 받은 파일들을 '알집의 각각의 폴더에 풀기'기능을 이용해 압축을 풀어준다.

이클립스의 첫 실행
처음 실행이 되면 작업디렉토리(workspace)를 지정하라는 메시지창이 뜬다. php파일이 실행되는 디렉토리 ( 예를들면 htdocs 폴더)를 지정해준다.
지정을 해주면 로딩 과정을 거쳐 큼지막한 Welcome 페이지가 나타날 것이다. 보고싶다면 나중에 볼 수도 있으니 우선은 그냥 넘어가자. 오른쪽 상단의 Go To The WorkBench를 클릭한다.

그러면 작업환경이 뜰 것이다. 이클립스는 기본적으로 자바를 제공한다. 지금 나온 화면은 Perspective가 Java로 설정이 된 상태다. 플러그 인들을 설치하면 여러가지 Perspective를 이용할 수 있다.

[ 이클립스 작업환경 - JAVA ]
메뉴를 살펴보면 가장 오른쪽에 Help가 있다. Help - Software Update - Find and Install을 선택하자. Install/Update 라는 창이 뜨는데, 여기서는 Search for new features to install 을 선택하자.

[ Help - Software Update - Find and Install을 선택하자 ]
그러면 Update sites to visit 이라는 창이 나온다. 오른쪽의 New Local Site를 골라주고, 조금전에 WTP와 PHP의 압축을 풀어준 폴더를 찾아서 확인을 해준다. 정상적으로 찾았다면 Edit Local Site라는 창이 뜰 것이다. 중요한 부분은 아니니 그냥 넘어가도 된다. 만약 오류가 났다면 골라준 폴더 아래에 fetures와 plugins 디렉토리가 있나 확인해보자. 플러그 인을 압축할 때 폴더로 묶어 압축시킨경우에는 바로 그 아래 하위 폴더를 골라주어야 한다.

이렇게 두개를 추가시켜주고 나서 체크박스에 체크를 해준 후, Finish 버튼을 누른다. 그러면 몇가지 확인 창이 나오는데 Next, I Accept 등을 선택하면 설치과정은 끝이 난다.

PHP작업환경을 열어보자. Perspective를 선택하고 Others를 선택한 후에 PHP를 선택한다. 화면의 약간의 변화가 느껴지는가? 이곳이 PHP작업창이다.

[ Perspective를 선택 ]

[ Others의 PHP를 선택 ]

[ PHP 작업환경 ]
테스트프로젝트를 추가하고, 테스트 파일 한개를 작성해보자.

프로젝트 추가는 왼쪽의 Navigation에서 마우스 오른쪽버튼을 눌러 PHP Project를 선택해주면, 프로젝트 이름과 디폴트 폴더를 지정하는 곳이 나온다. 지정해주고 확인을 눌러주면 PHP Project가 한개 추가된 것을 알 수 있을 것이다.

[ 새로운 프로젝트 추가 ]
파일 추가도 마찬가지다. 프로젝트에서 마우스 오른쪽 버튼을 눌러 PHP File을 선택해주고, 파일이름을 작성한 후 확인을 눌러주면 파일이 한개 추가된다.


[ PHP파일 추가 ]

지금까지 이클립스에 PHP개발환경을 설치하는 것을 알아보았다. 다음 포스트에서는 이클립스 PHP환경을 꾸미고 세세한 부분의 설정에 대해 알아보겠다.

들어가기 앞서

저의 짧은 글 실력과 대충 날림으로 적은 강좌에 많은 분들의 호응에 감사드립니다. 이번 강좌도 이전것과 별반 다르지는 않지만, 기다리시는 분들이 있는것 같아 주저주저하면서도 올리게됩니다. 많은 분들이 이클립스를 사용해 개발시간을 줄이고 또 함께 피드백 하면서 PHP를 발전시켜나갔으면 좋겠습니다. 감사합니다. 강좌에서는 1편과 같이 존칭을 생략합니다.


PHP를 Eclipse로 개발하기 - 2 설정편

1. 폰트 변경하기
PHPSchool에 올라온 글 중에 '프로그래머에게 적합한 폰트' 이라는 글이 있었다. 개발자들이 가장 많이 쓴다는 BitStream vera sans Mono 로 폰트를 변경해보자. [다운로드]

압축을 풀고 VeraMono.ttf 파일을 설치한다. (설치 방법은 생략)

Window->Preferences항목을 선택하면 Preferences창이 열린다. 앞으로의 모든 설정은 이곳에서 하게될 것이다.
가장 위의 General - Appearance - Color and fonts를 선택하면 이클립스 플러그인 들의 폰트나 색상을 지정해 줄 수 있는 화면이 나온다.

가장 위의 Basic에서 Text Font를 선택하고 Change Font버튼을 누른다. 글꼴 창에서 Bitstream VeraSans Mono를 고르고 확인을 눌러주면 폰트가 바뀐다. 그 후 OK를 눌러준다.

[ 기본 에디터 폰트 바꾸기 ]
간단하게 에디터의 폰트가 바뀐것을 확인할 수 있을 것이다.

2. 코드 템플릿 바꾸기
새로운 PHP파일을 생성하면,

< php
/*
* Created on 2006. 3. 6
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
? >

이런 식의 주석이 붙어있을 것이다. 이 문구는 주석에 나와있는 대로 Window - Preferences - PHPeclipse WebDevelopment - PHP - Code Templates 에서 바꿀 수 있다. 한번 바꿔보도록 하자.


[ Filter를 이용해 빨리 찾아가기. ]

이번에는 클릭을 반복하여 여는 대신, Filter를 이용해 빠르게 열어보도록 한다. 우선 Windows - Preferences를 열어보면 가장 상단에 type filter text 라는 텍스트박스를 볼 수 있다. 여기에 code template이라고 입력하면 트리메뉴가 필터링 되면서 빠르게 찾아지게된다. code template이라는 이름을 가진 것이 자바에 1개, PHP 에 1개가 있을 것이다. PHPeclipse 아래에 있는 code template을 선택한다.

[ 코드템플릿 찾아가기 ]
오른쪽의 트리 중 New PHP files를 선택하고 Edit버튼을 눌러주면 템플릿을 수정할 수 있는 창이 나온다. 이곳에서 자신이 원하는 템플릿을 넣어줄 수 있다. 나의 경우에는



< ?php
/**
* Created on ${date}
* Author: Kim HyunJin (loveisfunny-at-gmail.com)
*/

? >


이렇게 넣었다.

[ 코드템플릿 변경완료! ]
세 번쩨 줄의 ${date}는 커스텀변수로, 이렇게 넣으면 파일 생성날짜가 자동으로 찍혀나온다. 이 변수목록은 템플릿 수정창 하단의 Insert Variables 버튼을 클릭하면 볼 수 있다. 여러 가지가 있는데 직접 해본 것은 몇개 없어서 아는 것은 몇 개 안된다. 관심있으신 분들은 직접 사용해보시고 제일 좋은것을 사용하면 될것이다. 이렇게 설정해두면 새 파일을 생성할 때마다 설정해 둔 템플릿이 나오게 된다. 프로젝트를 진행하다보면 파일 가장 윗단에 공통 파일을 인클루드 하게되는 경우가 있는데, 이럴 때에도 유용하게 쓰일 수 있다.

3. 레퍼런스 연결하기
개발 중에 가장 많이 들춰보아야 하는 것이 바로 레퍼런스가 아닐까 싶다. PHP 레퍼펀스는 이곳에서 얻을 수 있다.
파일을 다운로드 했으면 이제 레퍼런스를 이클립스에 연결시켜 빠르게 열 수 있는 방법을 알아보자.

[ 레퍼런스는 이렇게 설정해준다. ]

Preferences 창에서 Help(WIN_32 *.chm format) 항목을 클릭한다. 그리고 방금 다운받은 chm파일의 경로를 적어주면 된다. 물론 Browse버튼을 클릭하면 탐색기에서 찾아 넣을 수 있다. 경로 위의 Show help in *.chm format? 이라는 체크박스를 선택해주면 chm파일을 직접 열어서 참고 할 수 있으므로 체크해두도록 하자. 체크 하지 않으면 이클립스 도움말 안에 삽입되어 같이 보여진다.(조금 불편하다) 이같이 설정해두면 앞으로 레퍼런스 파일은 Ctrl+Shift+h단축키로 열어볼 수 있다.

4. XAMPP와 연결하기
PHPEclipse에서 공식 지원하는 아파치 웹서버인 XAMPP를 설정해보겠다. XAMPP는 아파치재단에서 공식 후원하는 프로그램(Apache Friends)이다. 기본적으로 Apache 2.X, PHP 5.X, PHP 4.3.X, MySQL 5.X대를 지원한다. 특히나 PHP는 4와 5버젼이 동시에 설치되어 언제라도 다른 버전을 띄울 수 있도록 Switcher를 제공한다. 마지막으로 모든 (Stable) PEAR패키지를 한꺼번에 제공하므로 따로 다운로드 받을 필요가 없다는 장점이 있다. 연결되게되면 서버를 이클립스에서 아이콘 클릭만으로 시작/정지 할 수 있다.

지금까지 APMSETUP으로만 작업해왔던 개발자라면 한번쯤 바꿔보는 것도 좋다는 생각이 들어 장황하게 설명했다;;

글을 올린 시점의 XAMPP 사양은 이렇게 된다.
MySQL 5.0.18
Apache 2.2.0
PHP 5.1.1
phpMyAdmin 2.7.0 pl1

XAMPP 윈도우용은 이곳에서 다운받을 수 있다. [다운받기]

주의! 기존에 운용하던 아파치 서버(APMSETUP 등)가 있다면 끄고 XAMPP 서버를 켜도록 하자. 두개를 동시에 실행시키면 포트 충돌이 일어날것이다.

설치과정은 무척 간단하다. Next를 계속클릭하고 Finish를 날려주면 끝난다. 설치가 끝났으면 연결해보자.


[ xampp와 연결하기 ]

Preferences - PHPeclipse WebDevelopment - PHP external tools 의 XAMPP를 선택한다. XAMPP설치 시에 경로 설정을 따로 하지 않았다면 기본적으로 XAMPP는 c:\Program Files\xampp\에 설치된다. XAMPP start는 c:\Program Files\xampp\xampp_start.exe 로 설정해 주고, XAMPP stop은 c:\Program Files\xampp\xampp_stop.exe로 설정해 준다.

이제는 기본 아이콘에 있는 XAMPP START/XAMPP STOP 만으로 XAMPP를 시작/정지 할 수 있다. 두 버튼 모두 클릭 후에 콘솔이 열리면서 정상실행, 종료를 확인 할 수 있다.


5. UTF-8환경 만들기
요즘 프로젝트의 대세는 UTF-8이라 생각한다. UTF-8이 EUC-KR갖는 장점은 참 많지만 여기서는 논외로 하자. (사실은 논란에 휩싸이기 싫다..) 이클립스가 처음 설치되었을 때 인코딩은 MS949인데, 이것을 변경시켜보자. 인코딩 변경은 세곳에서 가능하다. 1. Preferences에서의 이클립스 기본 인코딩을 변경시키기. 2. Project속성에서 프로젝트 만의 기본인코딩을 변경시키기. 3. 파일 속성에서 파일만의 인코딩을 변화시키기. 눈치 챘겠지만 레벨 개념과 비슷하다. 1번을 변경시키면 앞으로 생성되는 모든 프로젝트는 UTF-8이 기본인코딩으로 설정되고, 2번을 변경시키면 그 프로젝트 내의 파일들이 모두 UTF-8이 기본인코딩이 된다. 마지막 3번은 따로 설명하지 않아도 알것이다.

(1) 이클립스 기본인코딩 변경시키기
Preferences - General - Editors에서 이클립스의 기본인코딩을 UTF-8로 변경시킬 수 있다. 대소문자의 구분이 없으므로 아무렇게나 입력해도 된다.
또한 WTP에서도 인코딩을 변경시켜줘야 한다.
Preferences - Web and XML 아래에 CSS files, HTML files에 들어가 Encoding을 UTF-8 로 맞춰주면 된다.


[ PHP인코딩 변경 ]


[ CSS 인코딩 변경 ]


[ HTML 인코딩 변경 ]


[ XML 인코딩 변경 ]

주의! 기존 EUC-KR을 사용하던 프로젝트가 있다면 실행하지 않도록 하자. 모든 인코딩이 깨져나올 것이다.

(2) 프로젝트/파일 기본 인코딩 변경시키기
메인 페이지의 Navigator에서 프로젝트를 하나 골라 마우스 오른쪽 버튼을 눌러 Properties를 선택하자. 가장 위의 Info 트리에서 Text file encoding에 Other를 골라 앞서 Preferences에서 골랐던 인코딩과는 다른 인코딩을 선택해주면 이 프로젝트에 한해 다른 인코딩을 사용할 수 있다. 파일 기본인코딩 변경도 같은 방법으로 해주면 된다.


이제 설정도 대략 끝이 났다. 이제는 이클립스로 개발만이 남았다.
여러분의 PHP개발이 이클립스로 날개를 달기를 바란다.

이것으로 저의 강좌를 마치며, 앞으로 단축키 목록, 쓸만한 플러그 인등의 소개를 꾸준히 올려볼 생각이다. 많은 호응 바란다.

//-------
이런 분들이 있어 프로그래머로 산다는게 자부심이 느껴지네요.
저도 열심히 해서 좋은 결과 남겨야죠 ㅎㅎ
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2006/12/19 15:03 2006/12/19 15:03
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2162

system - 명령어 함수

system
(PHP 3, PHP 4 , PHP 5)

system -- Execute an external program and display the output
Description
string system ( string command [, int return_var])


system() is just like the C version of the function in that it executes the given command and outputs the result. If a variable is provided as the second argument, then the return status code of the executed command will be written to this variable.


주의
사용자가 입력한 데이터를 이 함수로 넘길 때는, escapeshellarg()나 escapeshellcmd()를 사용하여, 사용자가 어떠한 명령을 실행하여 시스템을 조작하지 못하게 하여야 합니다.


참고: 이 함수를 사용하여 프로그램을 실행하고, 백그라운드에서 작업하게 내버려두려면, 그 프로그램의 출력이 파일이나 다른 출력 스트림을 향하게 하여야 합니다. 그렇지 않으면 PHP는 그 프로그램이 종료할 때까지 정지합니다.

The system() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.

Returns the last line of the command output on success, and FALSE on failure.

If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

예 1. system() example

< ?php
echo '< pre>';

// Outputs all the result of shellcommand "ls", and returns
// the last output line into $last_line. Stores the return value
// of the shell command in $retval.
$last_line = system('ls', $retval);

// Printing additional info
echo '


Last line of the output: ' . $last_line . '

Return value: ' . $retval;
? >



참고: 안전 모드에서 실행 명령은 safe_mode_exec_dir 안에서만 실행할 수 있습니다. 실용적인 이유로, 실행 경로에 ..을 허용하지 않습니다.


주의
안전 모드에서는 처음 명령어 이후에 따라오는 모든 단어를 하나의 인수로 취급합니다. 그러므로, echo y | echo x은 echo "y | echo x"가 됩니다.


See also exec(), passthru(), popen(), escapeshellcmd(), pcntl_exec(), and the backtick operator.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2006/12/11 15:29 2006/12/11 15:29
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2147

APM + lib 설치...

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=46636


zlib-1.2.3.tar.gz
ibpng-1.2.10.tar.gz
freetype-2.2.1.tar.gz
jpegsrc.v6b.tar.gz
gd-2.0.33.tar.gz
ibxml2-2.6.24.tar.gz
ibiconv-1.9.2.tar.gz


mysql-5.0.21.tar.gz
httpd-2.2.2.tar.gz
php-5.1.4.tar.gz
ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz


설치전에 꼭 밑의 두줄을 생성한다. 이것때문에 설치 중 문제가 발생하는 경우가 있다... 필수!!!
싫으면 말고..ㅡㅡ;; 후회할것이다.
왠만하면... /usr/local 경로에서 설치를 시작해라..ㅡㅡ;;
#rdate -s time.bora.net
#mkdir /usr/local/man/man1


-----------------------------------------------
Step 0 : Install Packages
-----------------------------------------------
0.1 ZLIB 설치
#tar xvfz zlib*
#cd zlib*
#./configure
#make
#make install
#cd ..
#rm -rf zlib*
-----------------------------------------------
0.2 LIBPNG 설치
#tar xvfz libpng*
#cd libpng*
#cp scripts/makefile.linux makefile
#make test
#make install
#cd ..
#rm -rf libpng*
-----------------------------------------------
0.3 FREETYPE 설치
#tar xvfz freetype*
#cd freetype*
#./configure
#make
#make install
#cd ..
#rm -rf freetype*
-----------------------------------------------
0.4 JPEGSRC 설치
#tar xvfz jpegsrc*
#cd jpeg-6b
#./configure --enable-shared --enable-static
#make
#make test
#make install
#make install-lib
#make install-headers
#cd ..
#rm -rf jpegsrc*
-----------------------------------------------
0.5 GD 설치
#tar xvfz gd*
#cd gd*
#./configure
#make
#make install
#cd ..
#rm -rf gd*
-----------------------------------------------
0.6 LIBXML2 설치
#tar xvfz libxml2*
#cd libxml2*
#./configure
#make
#make install
#cd ..
-----------------------------------------------
0.7 LIBICONV 설치
#tar xvfz libiconv*
#cd libiconv*
#./configure --prefix=/usr/local
#make
#make install
#ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2 (php 멍청한게.. /usr/lib 에서 찾는다.. /usr/local/lib 라고 해도 말이다..)
#cd ..
-----------------------------------------------





-----------------------------------------------
Step 1 : Install APM
-----------------------------------------------
1.1 MYSQL5 설치
#tar xvfz mysql*
#cd mysql*
#
./configure \
--prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data \
--disable-shared --enable-assembler \
--with-thread-safe-client --with-mysqld-user="mysql" \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-readline --without-debug \
--without-docs --without-bench \
--with-charset=euckr
#make
#make install
#cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
#/usr/local/mysql/bin/mysql_install_db
-----------------------------------------------
1.2 APACHE2 설치
#tar xvfz httpd*
#cd httpd*
#./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so --enable-rewrite
#make
#make install
-----------------------------------------------
1.3 PHP5 설치
#vi /etc/ld.so.conf (라이브러리 인식시키기..)
* 다음라인을 추가
/lib
/usr/lib
/usr/local/lib
/usr/local/mysql/lib/mysql

#ldconfig

#tar xvfz php*
#mv php* /usr/local/php (폴더명을 변경... tar.gz 를 조심...)
#cd /usr/local/php
#
./configure \
--prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-sysvshm=yes --enable-sysvsem=yes \
--enable-debug=no --enable-track-vars=yes \
--enable-url-fopen-wrapper=yes --with-ttf \
--with-png-dir=/usr --with-zlib-dir --with-jpeg-dir=/usr \
--with-gdbm=/usr --enable-ftp --with-tiff-dir=/usr \
--enable-memory-limit --enable-mbstring \
--with-expat-dir=/usr --enable-sockets \
--enable-wddx --with-freetype-dir=/usr \
--enable-bcmath --enable-mbstr-enc-trans \
--enable-mbregex --enable-exif --with-gd \
--enable-gd-native-ttf --enable-gd-imgstrttf \
--enable-calendar --with-openssl=/usr \
--with-iconv=/usr/local \
--with-xml --with-xmlrpc

#make
#make install
#cp php.ini-dist /usr/local/lib/php.ini
-----------------------------------------------
1.4 ZendOptimizer3 설치
#tar xvfz Zend*
#cd Zend*
#./install.sh
-----------------------------------------------



-----------------------------------------------
Step 2 : Setting APM
-----------------------------------------------
2.1 Apache2
#vi /usr/local/apache2/conf/httpd.conf

CustomLog logs/access_log common << 이 부분을 수정
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache2/logs/access_log common env=!IMAGE

//있는지 확인후 없으면 추가
LoadModule php5_module modules/libphp5.so

// php파일을 웹서버에서 인식하기 위해 아래두줄 추가
AddType application/x-httpd-php .php .html .htm .inc
AddType application/x-httpd-php-source .phps

// 처음페이지로 인식할 파일명설정
DirectoryIndex index.html index.htm index.php
-----------------------------------------------
2.2 MySQL5
#ln -s /usr/local/mysql/bin/mysql /usr/bin/
#ln -s /usr/local/mysql/bin/mysqldump /usr/bin/
비밀번호 설정
#/usr/local/mysql/bin/mysqladmin -u root password "비밀번호"


//mysql 커멘드에서 디비서버에 계정을 생성
//GRANT all privileges on dbname.* TO id@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
-----------------------------------------------
2.3 RC.LOCAL
vi /etc/rc.d/rc.local

/usr/local/apache2/bin/apachectl start >&/dev/null
/usr/local/mysql/bin/mysqld_safe --user=root & >&/dev/null
위 두줄을 추가한다.
-----------------------------------------------
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2006/11/27 17:22 2006/11/27 17:22
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2118

웹사이트 성능에 큰 영향을 주는 부분은 대개 부적절한 혹은 최적화되지 않은 데이터베이스 쿼리문에 있습니다.
하지만 데이터베이스 쿼리문이 최적화되었더라도 PHP 프로그램내에서의 간단한 몇가지 수정으로도 좀더 성능 개선을 할 수 있습니다.
해외 PHP관련 컨퍼런스등에서 여러번 제시된적 있는 몇가지 성능 튜닝을 위한 유용한 팁을 올립니다.



1. 최대한 쌍따옴표 대신에 일반따옴표를 쓴다.

쌍따옴표로 감산 문자열의 경우 PHP는 문자열 전체를 처리하게 됩니다.
따라서 처리되지 않고 그대로 유지될 혹은 나중에 처리되어야할 문자열의 경우 일반따옴표를 쓰는 것이 좋습니다.

예) $string = '문자열';

문자열 중간에 변수가 삽입될 경우에도 최대한 일반 따옴표를 쓰는 것이 좋지요.

예) $string = '문자열1' . $string2 . '문자열2';

참고로 성능튜닝은 아니고 코딩스타일인데, 쌍따옴표로 감싼 변수가 삽입된 문자열의 경우 변수는 { 와 }로 감싸주는 것이 좋습니다.
이 경우 객체변수나 배열변수 혹은 배열+객체변수도 삽입 가능합니다.

예) $string = "문자열1 {$string2} 문자열2 {$object->var} 문자열3 {$array[0]} {$array[1]->var}";

주의할 점)
아시겠지만 문자열에 일반따옴표가 들어갈 경우 따옴표마다 앞에 역슬래쉬로 escape시켜줘야 하는 점입니다.
쌍따옴표는 그대로 표현하면 됩니다.
이런 문자열변수를 eval로 처리할 경우에는 미리 str_replace() 함수로 쌍따옴표 앞에 역슬래쉬를 붙여주는 작업이 필요하게 됩니다.
이러한 점만 숙지한다면 큰 문제는 없을 것입니다.



2. 루프문에서 함수 사용은 금물

for ($i=0; $i
위와 같은 for 루프문들이 쓰이는 것을 곧잘 볼 수 있습니다.
PHP의 for 루프문, 두번째 인자의 함수는 매 루프마다 불려지기 때문에
배열이 클수록 함수를 부르는데 걸리는 시간만으로도 실행 시간을 상당히 뺏기게 됩니다.
이는 다음과 같이 바꿔주는 것이 좋습니다.

예1) for ($i=0, $cnt=count($array); $i<$cnt; $i++) {

예2)
$cnt = count($array);
for ($i=0; $i<$cnt; $i++) {

이 방법만으로도 엄청난 성능 개선을 가져왔다는 예도 있습니다. 배열이 무척 컸나보네요^^;
추가: 실제로 저의 경우에도, 엄청나지는 않았지만 꽤 괜찮은 성능개선을 맛봤었답니다 :)



3. 버퍼링

기본적으로 PHP의 버퍼 크기가 8K이기때문에 결과물이 크면 나누어서 보내야 하기에 I/O 시간만으로도 상당한 시간을 잡아먹게 됩니다.
하지만 버퍼링으로 결과물을 모았다가 한꺼번에 뿌려주게 되면 다른 방법들을 쓰지 않더라도 몇배의 성능 개선도 가져올 수 있습니다.

간단히 스크립 처음에 마지막에 각각 ob_start() 와 ob_end_flush() 를 추가해주기만 하면 됩니다.

그냥 ob_start() 대신 ob_start('ob_gzhandler') 로 추가할 경우 (PHP에 gzip 모듈이 올라와 있어야 합니다.)
대부분의 웹브라우져가 압축을 지원하므로 트래픽양을 줄일 수 있고 결과적으로 클라이언트의 화면에 페이지가 뜨는데 걸리는 시간이 단축됩니다.
이 방법을 쓰더라도 웹브라우져가 압축을 지원하지 않으면 압축을 하지 않고 보내므로 따로 압축을 지원하는지 안하는지 확인할 필요도 없습니다.



4. 옵코드 캐싱

PHP의 젠드엔진은 PHP코드를 자체적인 옵코드로 컴파일한 후 실행을 합니다.
이 부분에서도 로드가 높은 사이트에서는 상당한 오버헤드가 일어날 수 있습니다.
따라서 PHP코드를 새로 컴파일해서 실행하는 것보다는 기존에 컴파일된 옵코드를 바로 실행하면 많은 실행속도를 단축시킬 수 있습니다.
이는 옵코드 캐시 모듈을 적재해야 하기 때문에 모든 곳에서 적용하기는 힘들 것입니다.
하지만 제가 알기론 대부분의 호스팅회사에서는 젠드옵티마이저를 적재하기 때문에 따로 신경쓰지 않으셔도 될것입니다.
만약 서버관리권한이 있거나 한다면 다른 옵코드 캐싱 모듈을 써보실 것도 권해드립니다.
APC(Advanced PHP Cache), Eaccelerator 혹은 현재는 개발 중단된 Turk-MMCache 등이 있는데, APC는 PECL로 설치가 가능하며 상당히 좋습니다.
Eaccelerator가 성능은 좀더 낫다는 것 같지만요. 이는 직접 테스트 비교해보는 것이 좋을 것입니다.
주의할 점은 젠드옵티마이저를 사용하지 않으면 젠드컴파일러로 컴파일된 바이너리는 실행하지 못한다는 단점이 있습니다.
컴파일된 상용 php프로그램 사용시에는 다른 방법이 없습니다..^^;;;



5. Regular Expression : POSIX Extented(ereg_) VS. Perl-Compatible(preg_)

대부분의 속도비교결과 Perl-Compatible 정규표현식이 조금 더 빠르다고 합니다. perl호환 정규표현식을 사용하기를 권장합니다.



6. 정규표현식 VS. str_replace()

간단한 문자 치환의 경우에는 str_replace() 함수를 쓰는 것이 훨씬 빠릅니다.
복잡한 따라서 정규표현식을 꼭 써야하는 경우를 제외하고는 PHP 기본문자함수를 쓰는 것이 좋습니다.



7. is_numeric(), is_integer()등 VS ctype_XXX()

변수의 형식을 체크할 시 기본 PHP함수보다 ctype이 더 빠르다고 합니다.
대신 ctype으로는 11가지 형식에대한 체크만 가능하다는 한계가 있으므로 자세한 것은 PHP매뉴얼을 참조하시길 바랍니다.
ctype은 PHP 매뉴얼에서 Character Type Functions 항목입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2006/11/24 11:57 2006/11/24 11:57
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/2106

« Previous : 1 : ... 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : ... 33 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          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
Statistics Graph

Site Stats

Total hits:
239619
Today:
271
Yesterday:
712