2009년 5월 28일 목요일

테이블 존재유무 확인

IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].[TABLE_NAME]')) BEGIN
  -- 테이블이 있을 때 처리 루틴
END ELSE BEGIN
  -- 테이블이 없을 때 처리 루틴
END

 

오류] 지정된 웹서버에 ASP.NET 버전 1.1이 실행되고 있지않아..

시작 ->  프로그램-> MicroVisual  .Net Studio 2003 -> Visual Studio .Net 도구 ->

Visual Studio .Net 2003 명령 프롬프트 실행

 

aspnet_regiis /i 를 입력하면 asp.net 1.1이 설치됨

asp 에서 regExp 정규식 사용법

폼에서 ID 와 PASSWD 입력받은 문자열 중

ID 는 영어 숫자만 입력 된것은 true 이고 다른건 false되도록

 

PASSWD도 역시 똑같이 이렇게 가능하도록 어떻게 해야하는지

정규식을 사용해서 자바스크립 말고 asp 코드 자체내에서 처리해 보자.

 

 

Function Word_check(str,patrn)
    Dim regEx, match, matches

    SET regEx = New RegExp

    regEx.Pattern = patrn            ' 패턴을 설정합니다.
    regEx.IgnoreCase = True      ' 대/소문자를 구분하지 않도록 합니다.
    regEx.Global = True             ' 전체 문자열을 검색하도록 설정합니다.

    SET Matches = regEx.Execute(str)

 

    if 0 < Matches.count then
        Word_check = false
    Else
        Word_check = true
    end if
End Function

 

 

 

위의 코드는 정규식을 이용해서 문자열이 패턴만으로 이뤄졌는지 확인하는 함수 입니다.

 

사용 방법은 response.write Word_check("문자열","패턴") 몇가지 패턴을 적어보자면

pattern0 = "[^가-힣]"  '한글만
pattern1 = "[^-0-9 ]"  '숫자만
pattern2 = "[^-a-zA-Z]"  '영어만
pattern3 = "[^-가-힣a-zA-Z0-9/ ]" '숫자와 영어 한글만
pattern4 = "<[^>]*>"   '태그만

pattern5 = "[^-a-zA-Z0-9/ ]"    '영어 숫자만

 

 

위에서 하려는 기능은

Word_check(id,pattern5) 이겁니다.

이렇게 하면 true나false가 반환 됩니다.

META TAG

meta 태그에는 name, content, http-equiv 3가지 속성이 있다.

 

<meta name="Subject" content=""> //홈페이지 주제
<meta name="Title" content=""> //제목
<meta name="Keywords" content=""> //키워드
<meta name="Description" content=""> //요약설명
<meta name="Author" content=""> //제작자
<meta name="Publisher" content=""> //제작사
<meta name="Other Agent" content=""> //웹책임자
<meta name="Claasification" content=""> //카테고리위치,분류
<meta name="Generator" content=""> //제작도구
<meta name="Reply-To" content=""> //메일주소
<meta name="Email" content=""> //메일주소
<meta name="Filename" content=""> //파일이름
<meta name="Author-Date" content=""> //제작일
<meta name="Date" content=""> //제작일
<meta name="Location" content=""> //위치
<meta name="Distribution" content=""> //배포자
<meta name="Copyright" content=""> //저작권
<meta name="Robots" content="ALL">
<meta name="Robots" content="index,follow"> //이 문서도 긁어가고 링크된 문서도 긁어감
<meta name="Robots" content="noindex,follow"> //이 문서는 긁어가지 말고 링크된 문서만 긁어감
<meta name="Robots" content="index,nofollow"> //이 문서는 긁어가고 링크는 무시함
<meta name="Robots" content="noindex,nofollow"> //이 문서도 긁지 않고 링크도 무시함

 

<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> //웹문서 언어 설정
<meta http-equiv="Imagetoolbar" content="no"> //그림위에 마우스 오버시 이미지 관련 툴바 숨김
<meta http-equiv="Refresh" content="60"> //60초 마다 새로고침
<meta http-equiv="Refresh" ccontent="5;url=주소"gt; //주소로 5초후 이동
<meta http-equiv="Cash-Control" content="no-cache"> //캐쉬가 되지 않게
<meta http-equiv="Last-Modified" content="Mon,20 Jul 2008 19:30:30"> //최종 수정일
<meta http-equiv="Pragma" content="no-cache"> //캐쉬가 되지 않게
<meta http-equiv="Expires" content="Mon, 08 Sep 2003 10:10:10 GMT">"> //캐쉬 만료(파기)일


<meta http-equiv="Page-Enter" content="revealtrans(Duration=1,Transition=12)">

//페이지 들어갈때 트랜지션 효과(장면 전환 효과)
<meta http-equiv="Page-Exit" content="revealtrans(Duration=1,Transition=12)">

//페이지 나갈때 트랜지션 효과(장면 전환 효과)

 

장면 전환 효과 속성값
Box out : 네모난 박스가 안쪽에서 바깥쪽으로
Circle in : 원이 바깥에서 안쪽으로
Circle out : 원이 안쪽에서 바깥쪽으로
Wipe up : 이미지의 아래에서 위쪽으로 수직 이동
Wipe down : 이미지의 위에서 아래쪽으로 수직 이동
Wipe right : 이미지의 왼쪽에서 오른쪽으로 수평 이동
Wipe left : 이미지의 오른쪽에서 왼쪽으로 수평 이동
Vertical blinds : 수직 블라인드가 쳐지는 형태로 변환
Horizontal blinds : 수평 블라인드가 쳐지는 형태로 변환
Checkerboard across : 바둑판 형태의 격자가 왼쪽에서 오른쪽으로 생성
Checkerboard down : 바둑판 형태의 격자가 위에서 아래로 생성
Random dissove : 안개와 비슷한 형태로 변환
Split vertical in : 왼쪽과 오른쪽 끝에서 중앙으로 수직 이동
Split vertical out : 중앙에서 양쪽 끝으로 수직 이동
Split Horizontal in : 양쪽에서 중앙으로 수평 이동
Split Horizontal out : 중앙에서 양쪽끝으로 수직 이동
Strips left down : 대각선 형태로 오른쪽 상단에서 왼쪽 하단으로 이동
Strips left up : 대각선 형태로 오른쪽 하단에서 왼쪽 상단으로 이동
Strips right down : 대각선 형태로 왼쪽 상단에서 오른쪽 하단으로 이동
Strips right up : 대각선 형태로 왼쪽 하단에서 오른쪽 상단으로 이동
Random bars horizontal : 수평선이 무작위로 생성
Random bars vertical : 수직선이 무작위로 생성
Random : 임의로 생성

방통위 유해사이트 신고

처리기간은 최대 1달

해당 웹사이트의 포트번호를 변경하면 다시 신고를 해야....된다...--;

뭐냐..--; 일을 하자는 건지 말자는 건지..--;

포트번호를 몇만게씩 계속변경하면??

몇만개 데이터를 다 막을꺼냐??

 

하여튼..울나라 공무원들..하는짓하고는...--;

Excel 경과년수 산출

일반적인 경과년 구하는 수식은 다음과 같습니다.


=DATEDIF(
시작일셀, 종료일셀, “y”) & “ “ & DATEDIF(시작일셀, 종료일셀, “ym”) & “개월 “ & DATEDIF(시작일셀, 종료일셀, “md”) & “


시작일이 2000년 1월 1일 이고 현재일이 2006년 7월 29일 이니까 상단의 수식을 적용하면 결과는 이렇게 나옵니다.

결과를 나타내는 셀에는 "6년 7개월 20일" 이라고 깔끔하게 나옵니다.^^


그리고 근속년수의
합계가 필요한 경우 다음과 같은 수식을 사용하시면 됩니다.


=DATEDIF(0, SUM(
종료일범위-시작일범위), “y”) &“ “ & DATEDIF(0, SUM(종료일범위-시작일범위), “ym”) & “개월 “ & DATEDIF(0, SUM(종료일범위-시작일범위), “md”) & “

범위를 연산하므로 배열수식입니다. 입력할 , Ctrl+Shift+Enter 키를 입력.

배열수식으로
입력하기 싫으면 SUM 함수를 SUMPRODUCT 함수로 대체적용 하시 됩니다.

경과년수의 평균은 위의 SUM 함수를 AVERAGE 함수로 대체하면 됩니다.

역시 배열수식이므로 Ctrl+Shift+Enter 키로 수식을 입력해 줘야 합니다.

우편물 주소이전

www.epost.go.kr 주소이전신고 신청하면 3개월 동안 예전주소 우편물을 모두 바뀐주소록 보내줌...

팀장이 팀원에게 제시하는 44가지 핵심요소

팀장이 팀원에게 제시하는 44가지 핵심요소


1단계 명확한 비전과 목표를 제시하라
 01 사명과 비전, 가치척도를 명확히 제시하라
 02 전략 및 목표, 사업에 대한 결의를 다져라
 03 광범위한 목표를 세분화하라
 04 처음부터 목표를 구체적으로 설정하라
 05 목표의 기준점을 구체적으로 제시하라
 06 실천 가능한 목표를 제시하라
 07 현실적인 목표로 동기부여를 하라
 08 목표에 대한 스케줄을 체계적으로 짜라

 

2단계 휘파람 불며 일하도록 동기를 부여하라
 09 당장 할 수 있는 일과 할 수 없는 일을 구별하라
 10 개개인의 능력에 맞춰 역할을 분담하라
 11 자율권을 줌으로써 책임감을 부여하라
 12 매우 가치 있는 일을 한다는 인식을 심어줘라
 13 격려는 팀원들의 사기를 북돋아준다
 14 팀원들에 대한 불신은 악영향을 미친다
 15 팀원들과 목표에 대해 허심탄회하게 토론하라
 16 목표 달성시 주어지는 혜택에 대해 알려줘라
 17 목표를 자발적으로 수용할 수 있도록 도와줘라
 18 최선을 다하는 것과 책임감을 갖는 것은 다르다
 19 팀원들 스스로 수행 평가도를 작성하게 하라

 

3단계 현실적이고도 공정한 심사 기준을 만들어라
 20 수행 평가에 쏟는 시간을 최소화하라
 21 공정한 심사 기준으로 팀원들을 평가하라
 22 심사 기준을 너무 복잡하게 만들지 마라
 23 중간 점검을 통해 실수를 최소화하라
 24 평가 기준을 최대한 신뢰하라
 25 목표에 대한 예상치와 실제 결과를 대조하라
 26 팀원들의 수행도가 회사에 미치는 영향을 알려줘라


4단계 사실에 근거해 객관적으로 평가하라
 27 평가는 일을 긍정적으로 이끌어가기 위한 수단이다
 28 사실에 근거해 객관적으로 평가하라
 29 문제 행동에 대해 구체적으로 지적하라
 30 평가 결과를 알려줌으로써 팀원들을 자극하라
 31 평가 결과를 알려줄 때도 타이밍이 중요하다
 32 단순 지적 차원에서의 평가는 금물이다
 33 평가 후 팀원들과 대화를 나눠라
 34 명령보다 제시가 훨씬 효과적이다


5단계 현명한 피드백으로 리더십의 기본을 다져라
 35 징계 그 자체보다는 일의 결과를 예측하라
 36 경고하면서 미안해하거나 사과하지 마라
 37 공식적인 입장을 통해 문제를 해결하라
 38 경고를 할 때는 직설적으로 하라
 39 팀원들을 대신해 문제를 해결해주지 마라
 40 팀원이 변명하더라도 일단 공감한 후에 지적하라
 41 필요 이상 돕는 건 팀원에게 독이 된다
 42 회의를 통해 일의 진행 상황을 수시로 점검하라
 43 회의에 나왔던 사안들은 반드시 서류화하라
 44 팀원들 앞에서 책임감 있는 모습을 보여라

성공하는 사람들의 일과 인생에 대한 11가지 기술

성공하는 사람들의 일과 인생에 대한 11가지 기술


저자 : John Maxwell


발행 : Warner Books (2003 . 4)

 

 

[MAIN IDEA]


더 좋은 방향으로 삶을 변화시키기 위해서는 좀더 효율적으로 생각하는 방법을 배울 필요가 있다. 효율적으로 생각하는 습관을 가질 수 있다면 삶을 근본적으로 바꿀 수 있다. 어떤 사람은 인생에서 성공을 거두는 반면 다른 사람들은 그렇지 못한 이유도 바로 여기에 있다. 즉 성공하는 사람들은 그렇지 못한 사람들과 완전히 다른 방식으로 생각한다. 그러므로 현재 내가 성공적이든 아니든 관계없이 긍정적으로 생각하는 습관을 가지고 이를 계속 실행에 옮길 수만 있다면 내가 종사하는 분야에서 얼마든지 최고가 될 수 있다.


좋은 사고습관은 성공하는 사람과 그렇지 못한 사람을 구분하는 가장 큰 특징이다. 성공하는 사람은 자신이 생각하는 바와 성취할 수 있는 것 사이의 관계를 뚜렷이 이해할 줄 안다. 자신이 생각하는 것을 조절하고 방향을 설정함으로써 성취하고자 하는 것까지도 조절할 수 있게 된다.

 

 

성공하는 사람들의 11가지 사고 기술


 

1. 언제나 큰 그림을 생각한다.


큰 그림을 볼 줄 아는 사람들은 당장 눈앞의 필요와 감정에 사로잡히는 일이 없이 세상을 위로부터 조망하는 능력을 갖고 있다. 이는 어떤 상황에서든 열린 마음을 갖고 새로운 아이디어와 가능성을 받아들일 마음의 준비가 돼 있음을 의미하는 것이다.


 

2. 생각에 초점을 가져야 한다.


생각에 초점을 잘 맞추는 사람들은 중요한 이슈에만 전념하고 그밖에 다른 사소한 일들은 모두 무시할 줄 안다. 이들은 자신들의 강점과 목표를 분명히 이해하므로 그로부터 거리가 있거나 우선순위가 낮은 일들 때문에 주어진 목표를 실행하지 못하는 일이 드물다.

 

 

3. 창조적으로 생각한다.

 

창조적으로 생각할 줄 아는 사람은 언제나 남들과는 다르게 생각하고 새로운 것을 받아들이는 데 주저하지 않는다. 창조성이란 리스크를 받아들이고 새로운 아이디어를 끊임없이 찾는 마음의 준비를 갖추고 있는 것을 의미한다.


 

4. 사고과정에 있어 현실성을 잃지 않는다.


창조적이고도 낙관적으로 생각하는 능력을 키우려면 사고에 있어 언제나 현실성을 잃지 않도록 해야 한다. 이를 꾸준히 하지 못한다면 결코 문제 해결을 한다거나 과거의 실수로부터 교훈을 얻지 못할 것이다.

 

 

5. 전략적 사고를 한다. 
 

행동에 본격적으로 착수하기 전에 잠시 멈추고 전략적 사고를 시도해본다. 무엇을 먼저 해야 할지에 대해 생각하여 내가 기울이는 노력이 비생산적인 활동으로 낭비될 수 있는 가능성을 줄일 수 있다.


 

6. 가능성을 염두에 둔다.


가능성을 염두에 둔 사고란 현재 가능하지 않은 일이나 과거에 한 번도 시도되지 않았던 일에 대해서 생각하는 것을 의미한다. 이러한 종류의 사고를 함으로써 광범위한 옵션과 아이디어를 가능성의 영역으로 끌어들일 수 있다.

 

 

7. 과거 회귀형 사고를 시도한다.

 

과거 회귀형 사고란 내가 하는 일을 깊이 생각하고 이를 평가해보는 태도를 말한다. 이런 사고 태도는 요리로 비유하면 생각이 완전히 익을 때까지 푹 익히는 찜통 같은 역할을 한다.


 

8. 항상 지배적인 사고 방식에 의문을 제기한다.


일반적으로 받아들여지는 상식과 역행하는 것은 때로 상당한 자신감을 요하는 일이다. 그러나 그에 따른 보상은 엄청나게 클 수 있다. 내가 무슨 일을 할 때 단순히 남들이 하기 때문에 하고 있는 것이라면 잠시 멈춰 서서 내가 뭘 하고 있는지를 자문해 볼 필요가 있다.

 

 

9. 다른 사람들의 의견을 적극 받아들인다.
 

효과적 사고를 하는 사람들은 진정으로 도움이 될만한 아이디어를 내는 사람들을 귀중하게 여길 줄 안다. 성공의 가능성을 높이기 위해 다른 사람들의 아이디어를 내 생각에 적극 반영한다. 이는 내 생각을 더 다듬을 수 있을 뿐 아니라 더 나은 결과를 얻는 데도 도움이 된다.


 

10. 팀워크를 통한 사고과정을 시도해본다.


협력을 통한 사고란 이타적인 사고를 말한다. 협력적 사고는 내 자신의 문제에만 치중하지 않고 외향적 사고를 지향한다.

 

 

11. 분명한 목적의식을 갖는 사고를 한다.

 

목적의식을 갖는 사고는 반드시 돈과 관련된 것만은 아니다. 이는 내가 속한 조직의 목표를 생각하고 내가 지금 약속한 바를 제대로 이행하고 있는가를 평가하는 것을 의미한다. 이것이 진정한 목적의식을 갖는 사고이다.

 

Windows Server 2003 Standard, Enterprice 차이점

Windows Server 2003 R2 Standard 및 Enterprise KN Edition은 선택적 구성 요소인 Windows Media Services를 포함하지 않으며 그 밖의 기능은 Windows Server 2003 R2 Standard 및 Enterprise Edition과 동일합니다. 이러한 버전은 지사 서버 관리를 단순화하고, ID 및 액세스 관리를 개선하고, 저장소 관리 비용을 줄이며, 기능이 풍부한 웹 플랫폼을 제공하는 Windows Server 2003 R2 최신 업데이트에 기반합니다. KN 버전은 32비트 플랫폼 하드웨어용으로만 제공됩니다.

Windows Server 2003 R2 Standard 및 Enterprise KN Edition과 Windows Server 2003 R2 Standard 및 Enterprise Edition의 기능에 대한 자세한 내용을 보려면 Windows Server 페이지를 방문하십시오.
http://www.microsoft.com/korea/windowsserver2003/r2/whatsnewinr2.mspx.

Windows Server 2003 R2 Standard 및 Enterprise KN Edition과 Windows Server 2003 R2 Standard 및 Enterprise Editions의 차이점

Windows Server 2003 R2 Standard 및 Enterprise KN Edition은 선택적 구성 요소인 Windows Media Services를 포함하지 않으며 그 밖의 기능은 Windows Server 2003 Standard 및 Enterprise Edition과 동일합니다.
기타 자주 제기되는 질문 사항도 이 페이지에서 볼 수 있습니다.

다음과 같은 기능을 사용하려면 Microsoft 또는 타사의 미디어 서버 소프트웨어를 설치해야 합니다.

기업 인트라넷과 인터넷을 통해 오디오 및 비디오 스트리밍 제공

유니캐스트 및 서버 쪽 재생 목록과 같은 기본 스트리밍 기능 제공

멀티캐스트 및 무선 네트워크 지원과 같은 고급 스트리밍 기능 제공

Windows Media Services의 모든 기능을 알아보려면 다음 사이트를 방문하십시오.
http://www.microsoft.com/korea/windowsserver2003/techinfo/overview/wms.mspx.

컴퓨터 제조업체에서 Windows Server 2003 R2 Standard 및 Enterprise KN Edition을 실행하는 시스템에 타사 미디어 서버를 미리 설치할 수 있습니다. 이와 별도로 고객이 Microsoft 또는 타사의 미디어 서버 소프트웨어를 개별적으로 설치할 수도 있습니다.

불필요한 Windows 서비스 삭제

서비스 관리자에서 표시된 서비스명을 복사

명령어 프롬프트에서 아래와 같이 입력

C:\> sc delete "Apache2"

대형 포털 사이트에서 메일 반송 되는 경우

메일이 전체적으로 모두 발송이 안되는 것이 아니라
몇몇 포털 사이트에서는 반송 되고, 몇몇 사이트에서는 정상적으로 발송 되는 경우가 있다.
대부분 로그를 보면 spamhaus 등과 같이 스팸 리스트에 등록되어 있거나
어떠한 사유로 인해 해당 사이트에서 스팸으로 간주되는 경우가 대부분이다.

일단 기본적으로 네이버, 다음, 네이트, 엠파스, 야후 에서는 아래의 세가지 설정이 필요하고
hotmail 의 경우 4번 내용이 추가적으로 하나 더 필요하다.


1) SPF 레코드 확인
[root@localhost ~]# nslookup
> set type=txt
> pandora.pe.kr
Server:         168.126.63.1
Address:        168.126.63.1#53

Non-authoritative answer:
*** Can't find pandora.pe.kr: No answer

Authoritative answers can be found from:
pandora.pe.kr
        origin = ns.pandora.pe.kr
        mail addr = root.pandora.pe.kr
        serial = 2008011610
        refresh = 10800
        retry = 900
        expire = 604800
        minimum = 86400

위의 경우는 SPF 레코드가 설정되어 있지 않은 경우로, 해당 DNS 에 설정해주어야 한다.
아래와 같이 질의 되어야 정상적으로 설정되었다고 볼 수 있다.

[root@localhost ~]# nslookup
> set type=txt
> pandora.pe.kr
Server:         168.126.63.1
Address:        168.126.63.1#53

pandora.pe.kr   text = "v=spf1 ip4:222.122.45.137 ~all"


2) 리버스도메인 등록
리버스 도메인은 자체 네임서버에 셋팅한다고 되는 것이 아니다.
보통 아이피를 관리하는 ISP 업체에 요청을 해야 한다.

3) 화이트도메인 등록
위의 내용들이 설정 되고 나면
https://www.kisarbl.or.kr/ 사이트에 접속해서
화이트 도메인 등록을 해야 한다.

4) hotmail senderid 등록

많은 파일을 한번에 지우는 법

간혹 특정 시스템에서 /var/spool/clientmqueue 디렉토리에 발송되지 못한 메일 관련 파일들이 무수히 많이 쌓여 디스크가 Full 이 날 경우가 있다.

이 때 해당 디렉토리 아래에 있는 파일을 'rm *' 으로 지우려고 하면 다음과 같이 에러가 발생한다.

# rm *
-bash: /bin/rm: Argument list too long

이럴 경우에는 간단히 아래의 명령으로 삭제하면 된다.

# find . -type f -exec rm -f {} \;

참고로 위 명령을 실행하기 전에 반드시 현재 디렉토리가 어디인지 확인하는 것을 잊으면 안된다.

avc : denied

페도라 코어3에서 부터는 SELinux 가 기본적으로 사용.

이 메시지는 현재 실행된 SELinux 정책이 그 응용프로그램의 동작을 허락하지 않기 때문.

SELinux 를 사용하지 않으려면 /etc/sysconfig/selinux 파일에서

SELINUX=enforcing

이 부분을

SELINUX=disabled

로 수정후 시스템을 리부팅.

빈파일 생성

dd if=/dev/zero of=./tmp bs=1024 count=102400

메일 포워딩 방법

1. aliases 로 하는 방법

 

# cd /etc

# vi aliases

cmjeong:negasa@hanmail.net

:wq

# newaliases

 

수정후 newaliases를 해야 적용이 된다.

 

 

2. .forward 파일로 하는 방법

 

해당 계정의 홈디렉토리에 파일 생성

 

# cd /home/cmjeong

# touch .forward

# vi .forward

negasa@hanmail.net, \cmjeong@nuribox.co.kr

:wq

 

자신의 계정에게도 메일을 받으면서 다른 웹메일로도 전송을 하려면 위와 같은 방법을 사용한다.

자신의 계정 앞에 \를 붙여줘야 메일이 반복되는 현상을 방지 할 수 있다.

트래픽 체크

#!/bin/sh

if [ "$1" != "" ]; then

# ethnet device
ETH="$1:"
CHECK=/proc/net/dev
CAT=/bin/cat

GREP="/bin/grep ${ETH}"
SED="sed -e s/${ETH}//"
UPTIME=/usr/bin/uptime

# parcket user check
set `${CAT} ${CHECK} | ${GREP} | ${SED}`

# Transmit packet
let "in1 = $1"
let "out1 = $9"

echo "wait....\n"
sleep 10

set `${CAT} ${CHECK} | ${GREP} | ${SED}`

let "in0 = $1"
let "out0 = $9"

let " in = ($in0 - $in1) / (10 * 1024)"
let " out = ($out0 - $out1) / (10 * 1024)"
echo "수신(in) $in kbyte/s"
echo "송신(out) $out kbyte/s"

else
echo "USAGE: $0 [ethernet device no]"
echo "ex) ./$0 eth0"
fi

exit 0

rpm 응답이 없는경우

#rpm -qa | more (Hanging 된 상태로 멈추어 있는 상태)

#cd /var/lib/rpm

#db_verify Packages
db_verify:fatal region error detected; run recovery

#rm -f __db.00[0-3]
#db_verify Packages (에러가 없다면 OK)
#rpmdb -v --rebuilddb (안해도 됨)
#rpm -qa를 실행 (잘되면 OK)
__db.00[0-3] 파일은 이때 살아남

mod_rewrite 추가

사용 중 추가하는 방법

cd 아파치설치디렉토리/src/modules/standard
/usr/local/apache/apxs -c -I/usr/include/gdbm mod_rewrite.c
gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
/usr/local/apache/apxs -i mod_rewrite.so


vi /usr/local/apache/conf/httpd.conf

#------- 아래 부분 추가 -------
LoadModule rewrite_module     libexec/mod_rewrite.so
Addmodule mod_rewrite.c

#------- 여기까지 ---------
/usr/local/apache/apachectl configtest
/usr/local/apache/apachectl restart

src.rpm 설치

rpmbuild --rebuild rpmfile

tux 설치

tux 설치

tux rpm 설치

vi /etc/sysconfig/tux

TUXTHREADS=2    # cpu
DOCROOT=/home/tux/htdocs
LOGFILE=/home/tux/log
DAEMON_UID=nobody
DAEMON_GID=nobody
CGIROOT=/home/tux/cgi-bin

service tux start; service tux stop;    # /proc/sys/net/tux/* 최초 설정파일 생성

echo 1 > /proc/sys/net/tux/logging # 로그생성
echo 1 > /proc/sys/net/tux/referer_logging # referer 로그생성
echo 1 > /proc/sys/net/tux/virtual_server # 가상호스트 지원

# 가상호스트는  DOC_ROOT밑 호스트 url로 디렉토리 생성
# IP 기반 /home/tux/htdocs/192.200.7.136, /home/tux/htdocs/192.200.7.137
# url 기반 /home/tux/htdocs/img.skybell.co.kr, /home/tux/htdocs/img.skysms.co.kr

SELinux 사용X
vi /etc/sysconfig/selinux

SELINUX=enforcing --> SELINUX=disabled
reboot


BENCHMARK

http://www.litespeedtech.com/web-server-performance-comparison-litespeed-2.0-vs.html


log file

/usr/sbin/tux2w3c /home/tux/log/tux > tux.log

history 지우기

export HISTSIZE=0

sysctl -p

sysctl.conf 재구성..

하드웨어정보

1. 소개

서버에 장착되어 있는 하드웨어의 정보를 알고 싶을때 간단한 명령으로 알아볼 수 있는 팁을 소개하고자 합니다.
이전에 소개한 B.02.10 보다 몇가지 옵션지원사항이 늘어났습니다.


2. lshw 프로그램에 대해

lshw ( Hardware Lister)는 시스템의 하드웨어 구성에 대한 자세한 정보를 제공하기 위한 작은 도구입니다.
x86 or IA-64 시스템과 PowerPC 시스템에 대한 정확안 메모리 구성, 펌웨어 버전, 메인보드 구성, CPU 버전과 속도,
캐시 구성, 버스 속도, 기타 등등에 대해 리포팅 할 수 있습니다.


3. 구동 환경

- 리눅스 Kernel 2.4 또는 2.6
- PA-RISC, Alpha, IA-64(Itanium), PowerPC, x86 기반 시스템
- ANSI, C++ 컴파일러 (GCC 2.95.4 와 3.2.2에서 테스트되었음)


4. 소스 다운로드

먼저 사이트에서 소스를 다운로드합니다.  (최신버전 : lshw-B.02.13)



5. 컴파일

소스를 다운로드하였으면 컴파일을 합니다.
GUI모드에서 사용하고자할때는 make 대신 make gui 옵션을 사용합니다.

# tar vxfz lshw-B.02.13.tar.gz
# cd lshw-B.02.13
# make
# make install


6. 사용방법

* lshw는 /usr/sbin 위치에 설치됩니다.

* 옵션을 보고자 할때 : lshw --help

[root@nple.com /]# lshw --help
Hardware Lister (lshw) - B.02.13
usage: lshw [-format] [-options ...]
      lshw -version

        -version        print program version (B.02.13)

format can be
        -html          output hardware tree as HTML
        -xml            output hardware tree as XML
        -short          output hardware paths
        -businfo        output bus information

options can be
        -class CLASS    only show a certain class of hardware
        -C CLASS        same as '-class CLASS'
        -c CLASS        same as '-class CLASS'
        -disable TEST  disable a test (like pci, isapnp, cpuid, etc. )
        -enable TEST    enable a test (like pci, isapnp, cpuid, etc. )
        -quiet          don't display status
        -sanitize      sanitize output (remove sensitive information like serial numbers, etc.)
        -numeric        output numeric IDs (for PCI, USB, etc.)

* 간단한 하드웨어 정보만 출력해 보고자 할때 : lshw -short

[root@nple.com /]# lshw -short
H/W path          Device    Class      Description
===================================================
                            system    empty
/0                          bus        TYAN-Tempest-i5000VS-S5372
/0/0                        memory    105KiB BIOS
/0/4                        processor  Intel(R) Xeon(R) CPU          E5310  @ 1.60GHz
/0/4/8                      memory    16KiB L1 cache
/0/4/9                      memory    4MiB L2 cache
/0/5                        processor  Intel(R) Xeon(R) CPU          E5310  @ 1.60GHz
/0/5/a                      memory    16KiB L1 cache
/0/5/b                      memory    4MiB L2 cache
/0/6                        processor  CPU
/0/6/c                      memory    16KiB L1 cache
/0/6/d                      memory    4MiB L2 cache
/0/7                        processor  CPU
/0/7/e                      memory    16KiB L1 cache
/0/7/f                      memory    4MiB L2 cache
/0/1e                        memory    6GiB System Memory
/0/1e/0                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/1                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/2                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/3                      memory    DIMM Synchronous 533 MHz (1.9 ns) [empty]
/0/1e/4                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/5                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/6                      memory    1GiB DIMM Synchronous 533 MHz (1.9 ns)
/0/1e/7                      memory    DIMM Synchronous 533 MHz (1.9 ns) [empty]
/0/100                      bridge    5000V Chipset Memory Controller Hub
/0/100/2                    bridge    5000 Series Chipset PCI Express x8 Port 2-3
/0/100/2/0                  bridge    6311ESB/6321ESB PCI Express Upstream Port
/0/100/2/0/0                bridge    6311ESB/6321ESB PCI Express Downstream Port E1
/0/100/2/0/2                bridge    6311ESB/6321ESB PCI Express Downstream Port E3
/0/100/2/0/2/0    eth0      network    80003ES2LAN Gigabit Ethernet Controller (Copper)
/0/100/2/0/2/0.1  eth1      network    80003ES2LAN Gigabit Ethernet Controller (Copper)
/0/100/2/0.3                bridge    6311ESB/6321ESB PCI Express to PCI-X Bridge
/0/100/3                    bridge    5000 Series Chipset PCI Express x4 Port 3
/0/100/8                    system    5000 Series Chipset DMA Engine
/0/100/1c                    bridge    631xESB/632xESB/3100 Chipset PCI Express Root Port 1
/0/100/1d                    bus        631xESB/632xESB/3100 Chipset UHCI USB Controller #1
/0/100/1d/1      usb2      bus        UHCI Host Controller
/0/100/1d.1                  bus        631xESB/632xESB/3100 Chipset UHCI USB Controller #2
/0/100/1d.1/1    usb3      bus        UHCI Host Controller
/0/100/1d.2                  bus        631xESB/632xESB/3100 Chipset UHCI USB Controller #3
/0/100/1d.2/1    usb4      bus        UHCI Host Controller
/0/100/1d.3                  bus        631xESB/632xESB/3100 Chipset UHCI USB Controller #4
/0/100/1d.3/1    usb5      bus        UHCI Host Controller
/0/100/1d.7                  bus        631xESB/632xESB/3100 Chipset EHCI USB2 Controller
/0/100/1d.7/1    usb1      bus        EHCI Host Controller
/0/100/1e                    bridge    82801 PCI Bridge
/0/100/1e/1                  display    Volari Z7
/0/100/1f                    bridge    631xESB/632xESB/3100 Chipset LPC Interface Controller
/0/100/1f.1                  storage    631xESB/632xESB IDE Controller
/0/100/1f.2      scsi0      storage    631xESB/632xESB/3100 Chipset SATA IDE Controller
/0/100/1f.2/0    /dev/sda  disk      160GB WDC WD1600JS-55N
/0/100/1f.2/0/1  /dev/sda1  volume    147GiB EXT3 volume
/0/100/1f.2/0/2  /dev/sda2  volume    2047MiB Linux swap volume
/0/100/1f.2/1    /dev/sdb  disk      320GB WDC WD3200AAJS-2
/0/100/1f.2/1/1  /dev/sdb1  volume    298GiB EXT3 volume
/0/100/1f.3                  bus        631xESB/632xESB/3100 Chipset SMBus Controller
/0/101                      bridge    5000 Series Chipset FSB Registers
/0/102                      bridge    5000 Series Chipset FSB Registers
/0/103                      bridge    5000 Series Chipset FSB Registers
/0/104                      bridge    5000 Series Chipset Reserved Registers
/0/105                      bridge    5000 Series Chipset Reserved Registers
/0/106                      bridge    5000 Series Chipset FBD Registers
/0/107                      bridge    5000 Series Chipset FBD Registers

* 자세한 정보를 보고자 할때 : lshw

각 하드웨어 장치에 대한 명칭, 제품명, 제조사, 물리적 ID값, 상세한 하드웨어 값 등의
정보를  출력 해볼 수 있습니다.

기타 자세한 정보는 관련 사이트 : http://ezix.org/project/wiki/HardwareLiSter 를 참조하시기 바랍니다.

wget을 프락시 서버 통해서 사용

wget으로 다음과 같이 프락시 서버(Proxy Server)를 통해서 요청하는 방법을 설명한다.
로컬 -> 프락시 서버 -> 지정한 웹서버나 FTP

------------------------------------------------------------------------------
$ http_proxy=프락시서버:포트 wget URL
------------------------------------------------------------------------------

을 하면 지정한 프락시를 통해서 가져온다.
ftp도 같은 방법으로 ftp_proxy로 지정할 수 있다.

매번 위와 같이 입력하는 불편을 덜고자 한다면 ~/.wgetrc 에 다음을 넣어두면 된다.

------------------------------------------------------------------------------
http_proxy=프락시서버:포트
------------------------------------------------------------------------------

------------------------------------------------------------------------------
$ wget google.co.kr
--15:05:32-- http://google.co.kr/
      => `index.html'
211.251.xxx.xxx:8080에 접속하고 있습니다...connected.
Proxy 요청을 보냅니다, 서버로부터의 응답을 기다림...302 Moved Temporarily
... 생략 ...
------------------------------------------------------------------------------

좀 더 상세한 설정을 알아보자.

------------------------------------------------------------------------------
http_proxy=211.251.xxx.xxx:8080
proxy_user=????????
proxy_passwd=????????
no_proxy=.google.co.kr,.coffeenix.net
------------------------------------------------------------------------------

ID와 비밀번호로 인증과정이 필요한 프락시 서버는 proxy_user= 과 proxy_passwd=
로 설정할 수 있다. 이 때 wget은 Header에 'Proxy-Authorization: Basic ...'을
포함해서 보내게 된다.

no_proxy= 는 프락시 서버를 통하지 않을 URL을 콤마(,)로 구분하여 적어주면 된다.
no_proxy= 에서 지정한 이외의 URL에 대해 프락시없이 직접 가져오려면 해야할까?
또는 프락시를 일시 원하지 않는다면?
wget --proxy=off ... 처럼 하면 지정한 URL로 직접 요청을 하게 된다.

참고로 오픈된 프락시 서버 목록은 http://www.samair.ru/proxy/ 에서 얻을 수 있다.

* 참고자료 : info wget (wget Info 문서) -> Various -> Proxies

os 32, 64구별

linux 32bit

#getconf WORD_BIT

32

#getconf LONG_BIT

32

#uname -a
Linux iTSM1 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:27:17 EDT 2006 i686 athlon i386 GNU/Linux

 

linux 64bit

#getconf WORD_BIT
32
#getconf LONG_BIT
64

#uname -a
Linux TSM1 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

Qmail Double Bounce 처리법 (Qmail-remote 인터셉트)

qmail에서 failure notice 라는 제목으로 스팸 메일이 mailq에 자꾸 쌓여 리턴되는경우 대처법.

qmail에는 double bounce라는 효과적인 방법이 있지만 그방법으로 되지않을경우에는

qmail-remote 파일을 perl로 스크립트해서 1차적인 방법으로 막고  정상적인 qmail-remote를 실행하는 방법이다.

 

이방법을 QMAIL-REMOTE 인터셉트라고 한다.


- 발송을 담당하는 Qmail-remote 를 가로채 발송 직전 메일 헤더를 통해
Return Mail 을 SMTP 단에서 DROP 시킨다.

1. Qmail 발송 Log 생성

[/var/log] echo > qmail-remote.log
[/var/log] chmod 666 qmail-remote.log
[/var/log] chown qmailr.qmail qmail-remote.log

2. 원본 remote 파일 변경

[/var/qmail/bin] cp -a qmail-remote qmail-remote-org

: -a 옵션으로 동등한 소유권, 허가권을 가지고 가야 함

3. Script 작성

#!/usr/bin/perl

# 스탠다드 입력으로 메일 내용을 읽어들인다.
undef $/;
$inputdata = <STDIN>;
$/ = "\n";
$inputdata =~ /Subject: (.*)/;
$subject = $1;
$inputdata =~ /Received: from.*\(([0-9.]+)\)/;
$ip = $1;

# 시간을 구한다.
$now_string = localtime;

# 로그를 기록한다.
open FH, ">>/var/log/qmail-remote.log";
flock(FH,2);

# 반송메일을 드롭한다.
if ($subject =~ /(failure notice)/i) {
    $inputdata =~ /(no mailbox here by that name)/i;
    if ($1 eq "no mailbox here by that name") { // 없는유저일경우
        print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tDroped!!(NoUser) Subject:$subject\n";
        close FH;
        exit 2;
    } else {
        print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tSubject:$subject - Other\n";
        close FH;
    }
} else {
    print FH "$now_string\tIP:$ip\tTo:$ARGV[2]\tFrom:$ARGV[1]\tSubject:$subject\n";
    close FH;
}

# 원래 qmail-remote 프로그램을 실행시킨다.
open (MAIL, "| /var/qmail/bin/qmail-remote-org $ARGV[0] $ARGV[1] $ARGV[2]");
print {MAIL} $inputdata;
close MAIL;

 

4. Qmail 서비스 중지.

[/etc/rc.d/init.d] ./qmaild stop

5. Qmail-remote 파일 바꿔치기 및 퍼미션 변경

[/var/qmail/bin] cp test qmail-remote (OverWirte ?? Yes )
[/var/qmail/bin] chmod 655 qmail-remote
[/var/qmail/bin] chown root.qmail qmail-remote

6. 정상 작동 확인법.

1) ps -aux : qmail-remote 프로세스 확인
2) [/var/log] qmail-remote.log : log 확인
3) [/var/qmail/bin] qmail-qstat : Queue 상태확인
4) 직접 메일 발송 후 이상여부 확인

참고 자료 : http://home.netizen.ne.kr/board/read.php3?uid=225&code=_tip

                 http://qmail.kldp.org/phpbb/viewtopic.php?t=6525

ActiveX에서 HTML페이지의 Param 받기

1. ActiveX 컨트롤에 값을 받을 수 있는 프로퍼티를 만들어야 합니다.
방법은 비주얼베이직의 ActiveX컨트롤 인터페이스 마법사를 사용하면 간단
ActiveX컨트롤 인터페이스 마법사를 사용하는 방법
(1) 추가기능에서 추가기능관리자에서 ActiveX컨트롤 인터페이스 마법사를 추가하고 로드시킨다. 그러면 추가기능메뉴에 ActiveX컨트롤 인터페이스 마법사가 등록된다.
(2) ActiveX컨트롤 인터페이스 마법사를 실행
(3) 인터페이스 구성원 선택에서 불필요한 구성원은 모두 선택해제 한다. 필요하면 선택
(4) 사용자정의 구성원에서 추기를 클릭한다. 그리고, 예를 들어 memid라는 속성(프로퍼티)를 추가한다. 그리고, 다음
(5) 매핑설정은 필요하면 매핑시키고, 필요없으면 건너뛴다. 여기서는 건너뛰었다.
(6) 특성설정인데 데이터형식을 지정한다. 여기서는 String을 지정하였다. 기본값은 "" 빈문자열로 하고
(7) 그리고 마침하면 아래쪽과 같은 코드가 생긴다.
이 코드는 memid라는 속성에 대한 ActiveX 컨트롤 인터페이스이다.

2. 비주얼 인터데브로 ASP페3060;지를 오픈하고 개발한 ActiveX컨트롤을 등록하고 페이지에 올려놓으면 화면에 ActiveX컨트롤이 보일 것임

3. 이 ActiveX컨트롤을 선택하고 등록정보를 보면 사용자가 작성한 프로퍼티를 확인할 수 있을 것임.

이 프로퍼티에 < %=변수명% > 이런 식으로 하고 웹페이지를 실행하면 값을 받을 것임.

4. 그리고 값을 받은 뒤 바로 시행하게 하기 위해서는 UserControl_Show()이벤트에 해당코드를 작성하기 바람.


생성코드
'기본 속성 값:
Const m_def_memid = ""
'속성 변수:
Dim m_memid As String


'경고! 주석으로 되어 있는 다음 줄은 제거하거나 수정하지 마십시오!
'MemberInfo=13,0,0,
Public Property Get memid() As String
    memid = m_memid
End Property

Public Property Let memid(ByVal New_memid As String)
    m_memid = New_memid
    PropertyChanged "memid"
End Property

'사용자 정의 컨트롤에 대한 속성을 초기화합니다.
Private Sub UserControl_InitProperties()
    m_memid = m_def_memid
End Sub

'저장소에서 속성값을 로드합니다.
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

    m_memid = PropBag.ReadProperty("memid", m_def_memid)
End Sub

Private Sub UserControl_Show()

End Sub

'속성값을 저장소에 기록합니다.
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    Call PropBag.WriteProperty("memid", m_memid, m_def_memid)
End Sub

"C:\Windows\system32\ieframe.dll\1 을 찾을수없습니다"

IE7로 업그레이드 한후에 VB에서

구성요소 "Microsoft Internet Controls" 을 사용하려고

체크를하고 확인을 누르면

"C:\Windows\system32\ieframe.dll\1 을 찾을수없습니다" 라는

에러가 나오면서 사용할수 없게되는경우가 있는데 shdocvw.dll 파일을 c:\windows\system32 아래 복사해 한 후

 

아래 명령을 실행하면 된다.

 

regsvr32 c:\windows\system32\shdocvw.dll /u

이미 system32폴더에 같은 파일이 존재할경우에는

regsvr32 c:\windows\system32\shdocvw.dll /u
regsvr32 c:\windows\system32\shdocvw.dll

 

명령만 실행하면 됨

2009년 5월 27일 수요일

div로 레이아웃 만들때 주의할점(주석관련)

<div id="left" style="float:left;"></div>
<!-- 주석 -->
<!-- 주석 -->
<div id="body" style="float;left;"></div>

 

위와 같이 2개의 주석이 들어가면 빈공간이 생기므로 div 사이 하나의 주석만 넣을 수 있도록.

iframe 배경 투명하게 만들기

<iframe allowTransparency="true">

iframe body
<body style="background-color:transparent">

asp 텍스타파일에서 한줄씩 읽어오기

Const ForReading = 1, ForWriting = 2
Dim fso, MyFile
Set fso = SERVER.CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.OpenTextFile("C:\a.txt", ForReading)
i = 0
while ((not MyFile.AtEndOfStream) and i < 1000)
  ReadLineTextFile = MyFile.ReadLine
  response.write ReadLineTextFile & "<br>"
  i =  i +1

wend 

 

2009년 5월 26일 화요일

ASP 속도개선법

Response.Redirect 대신 Sever.Transfer를 사용하라
Response.Redirect는 Sever에서 브라우저에 요청 후 Sever로 돌아오나. Sever.Transfer는 Server내부에서 처리됩니다.

Directory URL에 후행 슬러시 사용
후행 슬래시를 생략하면 브라우저는 서버에 요청하여 디렉터리를 요구하고 있다는 응답을 받습니다. 그러면 브라우저는 URL에 슬래시를 첨가하여 두번째 요청을 하며 이때서야 서버가 그 디렉터리에 대한 기본 문서로 응답합니다.

Sever 변수사용금지
서버 변수에 액세스하면 웹 사이트가 서버에 특별한 요청을 하게 되어 요청한 것만이 아니라 모든 서버 변수를 수집하게 됩니다. 속도가 저하됨
ex : < Response.Write(“Data”)>

< OBJECT> Tag를 사용하라
Server.CreateObject는 즉시 개체를 만듭니다. 이 개체를 나중에 사용하지 않는다면 결국 리소스를 낭비하는 것입니다. < object id=objname> 태그는 objname을 선언하지만 이 개체의 메서드 또는 속성 중 하나가 처음 사용될 때까지 objname은 실제로 만들어지지 않습니다.
Ex : < OBJECT runat=server progid=ADODB.Connection id=dbcon> < /OBJECT>

일괄 처리 인라인 스크립트 및 Response.Write 문
응답버퍼링을 켜지 않으면 이 문(statement)이 여러 작은 패킷으로 네트워크를 통해 브라우저로 데이터를 쓰게 됩니다. 이 과정은 매우 느립니다. 작은 양의 스크립트 및 HTML을 여기 저기 배치하면 스크립트 엔진과 HTML간의 전환이 일어나서 성능이 떨어집니다. 가깝게 모여있는 인라인 식(expression)을 Response.Write를 한 번 호출하는 것으로 교체합니다. 특히 게시판과 같이 Until 문을 사용할 때 사용하시면 좋은 효과를 보것입니다.
Ex)
<table>
<% For Each fld in rs.Fields %>
<th>< % = fld.Name %></th>
<%
Next
While Not rs.EOF
%>
<tr>
<% For Each fld in rs.Fields %>
<td><% = fld.Value %></td>
<% Next
</tr>
<% rs.MoveNext
Wend %>
</table>
아래에 있는 더 효율적인 코드는 행마다 응답 스트림에 쓰기가 하나 있습니다. 모든 코드는 하나의 VBScript 블록에 포함됩니다.
<table>
<%
For each fld in rs.Fields
Response.Write ("< th>" & fld.Name & "< /th>" & vbCrLf)
Next
While Not rs.EOF
Response.Write ("< tr>")
For Each fld in rs.Fields %>
Response.Write("<td>" & fld.Value & "< /td>" & vbCrLf)
Next
Response.Write "</tr>"
End
%>< /table>

세션 개체의 현명한 사용
ASP는 자동으로 웹 서버에 접근하는 모든 사용자를 위한 세션을 작성합니다. 각 세션은 약 10 KB의 메모리 오버헤드(세션에 저장된 모든 데이터의 상단에 있는)를 갖고 있어서 모든 요청을 약간 늦춥니다. 세션은 구성할 수 있는 시간 제한 기간동안 유효하며 이 제한 시간은 일반적으로 20분입니다.
세션이 필요하지 않은 컨텐츠(도움말 화면, 방문자 영역 등)를 세션이 꺼진 별도의 ASP 응용 프로그램으로 옮길 수 있습니다. 각 페이지를 기초로 해당 페이지에 세션 개체가 필요 없다는 것을 알리기 위해 다음과 같은 지시어를 ASP 페이지 상단에 놓을 수 있습니다.
<% @EnableSessionState=False %>
이 지시어를 사용하게 되는 이유 중 하나는 세션이 프레임셋과 관심있는 문제를 만드는 것입니다. ASP는 언제나 한번에 한 세션에서 하나의 요청만이 실행되도록 보장합니다. 따라서 브라우저가 한 사용자를 위해 여러 페이지를 요청하면 한번에 단지 하나의 ASP 요청만이 세션에 전달되기 때문에 세션 개체에 액세스할 때 멀티스레딩 문제를 방지하지만 모든 페이지는 동시에 페인트되지 않고 차례로 순차적 방법으로 페인트됩니다. 어떤 프레임셋 페이지가 세션에 의지하지 않는 다면 ASP가 @EnableSessionState=False 지시어를 사용하도록 하십시오

ASP 내장함수

array(배열) - 배열을 반환

 

asc() - 문자의 ANSI문자값을 반환

 

atn() - 아크 탄젠트로 반환

 

cbool() - boolean형식으로 반환

 

cbyte() - byte형식으로 반환

 

ccur() - currency형식으로 반환

 

cdate() - date형식으로 반환

 

cdbl() - double형식으로 반환

 

chr() - asc()함수의 반대, ANSI문자를 일반문자로 변환

 

cint() - interger형식으로 반환

 

clng() - long형식으로 반환

 

cos(각도) - 주어진 각도의 코사인 값을 반환

 

createobject() - 자동화 인터페이스를 통해 다른 응용프로그램이나 프로그래밍 도구에 나타나는 객체에 대한 참조를 만들어 반환

 

cstr() - string형식으로 반환

 

date() - 현재의 날자를 반환

 

datediff(간격, 날짜1, 날짜2 [,firstdayofweek[, firstweekofyear]]) - 간격인수 yyyy(년), q(분기), m(월), y(일[일년기준]), d(일), w(요일), ww(주[일년기준]), h(시), n(분), s(초)

 

dateserial(년,월,일) - 주어진 년,월,일에 대한 date형식을 반환

 

exp() - 주어진 수에대한 자연로그(승수로 거듭제곱하는 수) 밑인 e를 반환

 

filter(inputstring,값[,include[,비교]])) - inputstring는 검색할 문자열의 1차원 배열 include는 true나 false값을 가지는데, true로 설정되면 값발견시 그값을 가진 배열을 반환하고,flase로 설정되면 검색에 맞지않는 부분의 배열을 반환 비교는 비교형식을 나타내는 숫자값입니다

 

fix() - 주어진 수의 정수를 반환

 

formatcurrency() - 원화 형식으로 반환 예) 1,000

 

formatdatetime() - 날자와 시간으로 형식화하여 반환

 

formatnumber(숫자,소수자릿수) - 숫자로 형식화된 식을 반환 소숫점 몇째자리...

 

formatpercent(수,소수자리수) - 퍼센트형식으로 반환 기본 소수2째자리까지.

 

hex() - 주어진 수를 16진수로 변환

 

hour() - 0과23 사이의 시간을 나타낸다

 

inputbox(프롬프트[,제목][,기본값][,xpos][,ypos][,helpfile,context]) - 대화상자

 

instr([시작,]문자열1,문자열2[,비교]) - 시작은 문자열 검색 시작위치, 문자열1은 검색할 문자이며, 문자열2는 찾아야할 문자, 비교는 비교상수를 나타냄

 

instrrev() - instr()과 반대로 문자 끝에서부터 검색

 

int() - 주어진 수의 정수부분을 반환

 

isarray() - 주어진 변수가 배열인지 판단하는 boolean값을 반환

 

isdate() - 주어진 식이 날짜로 전환 될수 있는지 나타내는 boolean값을 반환

 

isempty() - 주어진 변수가 초기화 되었는지 나타내는 boolean값을 반환

 

isnull() - 주어진 식이 유효한 데이터가 있는지 없는지 boolean값을 반환

 

isnumberic() - 주어진 식이 숫자로 값이 정해질 수 있는지 나타내는 boolean값 반환

 

isobject() - 자동화 객체를 참조하는지 여부를 나타내는 boolean값을 반환

 

join(목록[,구분기호]) - 배열에 포함되어 있는 여러 문자열을 결합하여 만든 문자열을 반환 모록은 1

차원 배열이름, 구분기호는 문자열을 구분하기위해 사용하고 기본값은 "" 공백

 

lbound(배열이름[,차원]) - 주어진 배열에서 사용할 수 있는 가장 작은 첨자를 반환 배열이름은 배열 변수의 이름, 차원은 배열의 차원중 가장 작은 값을 나타냄

 

lcase() - 주어진 문자를 소문자로 반환

 

left(문자열,수) - 주어진 문자를 왼쪽으로부터 주어진 수만큼의 문자열을 반환

 

len() - 주어진 문자열의 문자 개수를 세는 함수

 

loadpicture(그림파일의이름) - 그림객체를 반환

 

log() - 주어진수의 자연 로그를 반환

 

ltime() - 앞에 공백이 없는 문자열을 반환

 

mid(문자열,시작[,길이]) - 주어진 문자열에서 주어진 위치에서부터의 길이만큼의 문자를 반환

 

minute(시간) - 시간에서 분값(0~59)을 반환

 

month(날짜) - 달의 값(1~12)을 반환

 

monthname(달) - 주어진달의 숫자표현을 문자표현으로 바꾸어준다

 

msgbox(프롬프트[,단추][,제목][,helpfile,context]) - 프롬프트는 대화상자 안의 내용 단추는 단추모양,제목은 제목표시줄이름, helpfile은 도움말위치,context는 도움말 문맥번호

 

now() - 현재 날자와 시간을 반환

 

oct() - 주어진 숫자의 8진수 값을 나타내는 문자를 반환

 

replace(문자열,찾을문자열,바꿀문자열[,시작[,횟수[,비교]]]) - 문자열은 바꿀 대상, 찾을문자열은

문자열에서 바꾸어야 할 문자, 바꿀문자열은 찾은 문자열을 대치할 문자열, 시작은 검색시작위치 횟수는 바꾸는 횟수, 비교는 바꿀 때의 비교형식

 

right(문자열,수) - 주어진 문자의 오른쪽으로 부터 주어진 수만큼의 문자를 반환

 

rnd(수) - 난수를 반환 수는 생략가능

 

round(수) - 반올림한 수를 반환, 소수 첫째자리 반올림

 

rtrim(문자열) - 뒤에 공백이 없는 문자열을 반환

 

scriptengine() - 사용중인 스크립트 언어를 나타낼때 사용

 

scriptenginebuildversion() - 사용중인 스크립트 엔진의 버전 수를 반환

 

scriptenginemajorversion() - 사용중인 스크립트 엔진의 주 버전 수를 반환

 

scriptengineminorversion() - 사용중인 스크립트 언어의 보조 버전 수를 반환

 

second(시간) - 시스템 시간중 초값(0~59)을 반환

 

sgn(수) - 주어진 숫자의 부호를 나타내는 정수를 반환 0보다크면 1, 같으면 0, 작으면 -1을 반환

 

sin() - 주어진 라디안 값의 사인값을 반환

 

space(수) - 주어진 수만큼의 공백이 포함된 문자열을 반환

 

split(문자열[,구분기호[,수[,비교]]]) - 문자열은 배열에 포함될 문자열, 구분기호는 문자열 구분하기 위한기호를 표시. 생략시 "" 공백, 수는 반환될 문자열의 수를 나타냄, 비교는 바꿀때의 비교형식

 

sqr(수) - 주어진 수의 제곱근을 반환

 

strcomp(문자열1,문자열2[,비교]) - 두개의 문자열을 비교하여 결과값을 반환

 

strreverse(문자열) - 주어진 문자열을 뒤에서부터 읽은 문자열을 반환

 

string(수,문자) - 주어진 문자가 주어진 수만큼의 반복된 문자열을 반환

 

tan(수) - 주어진 라디안 값의 수 만큼의 탄젠트 값을 반환

 

time() - 현재 시간을 반환

 

timeserial(시, 분, 초) - 주어진 시간,분,초에 대한 시간 값을 반환

 

timevalue(시간) - 시간이 포함된 date형식을 반환해주는 함수

 

trim(문자열) - 앞뒤 공백이 없는 문자열을 반환해 줄 때 사용

 

typename(변수이름) - 주어진 변수의 정보를 나타내는 문자열 반환

 

ubound(배열이름[,차원]) - 배열의 차원으로 가장 큰 첨자를 반환, 배열함수의 개수 - 1 반환

 

ucase(문자열) - 주어진 문자를 대문자로 바꾸어 줍니다

 

vartype(변수) - 변수의 형식을 나타내는 값을 반환

 

weekday(날짜[,firstday of week]) - 요일을 나타내는 정수를 반환, firstday for week는 첫재요일을 숫자로

 

weekdayname(요일,약어, firsrday of week) - 요일은 숫자, 약어는 약어의 유무의 부울값

 

year() - 현재의 년도를 나타낼때 쓰임

Mac Address알아내기

<%@ LANGUAGE="VBSCRIPT"%>
<%
strIP = Request.ServerVariables("REMOTE_ADDR")
strMac = GetMACAddress(strIP)
strHost = Request.ServerVariables("REMOTE_HOST")

function GetMACAddress(strIP)
        Set net = Server.CreateObject("wscript.network")
        Set sh = Server.CreateObject("wscript.shell")
        sh.run "%comspec% /c nbtstat -A " & strIP & " > c:" & strIP & ".txt",0,true
        Set sh = nothing
        Set fso = createobject("scripting.filesystemobject")
        Set ts = fso.opentextfile("c:" & strIP & ".txt")
        macaddress = null
        Do While Not ts.AtEndOfStream
                data = ucase(trim(ts.readline))
                if instr(data,"MAC ADDRESS") Then
                        macaddress = trim(split(data,"=")(1))
                        Exit Do
                End if
        loop
        ts.close
        Set ts = nothing
        fso.deletefile "c:" & strIP & ".txt"
        Set fso = nothing
        GetMACAddress = macaddress
End function
%>

<body>
<%Response.Write("Your IP is : " & strIP & "
" & vbcrlf)%>
<%Response.Write("Your MAC is : " & strMac & vbcrlf)%>
</body>

설치된 리눅스 배포판 종류 방법

# cat /etc/issue

route 명령어로 특정 IP 막기

거부

# route add -host xxx.xxx.xxx.xxx reject

 

해제

# route del -host xxx.xxx.xxx.xxx reject

 

2009년 5월 23일 토요일

웹사이트 사용자 편의성 개선을 위한 10가지 팁

페이지 로딩 시간을 지켜라
훌륭한 사이트는 10초 안에 페이지 로딩이 완료됩니다. 어느 누구도 페이지를 보기까지 30초 이상 기다리지 않는다는 것을 기억하십시오. 본인의 웹사이트가 모든 사람들에게 보여지기를 원합니까? 아직도 많은 사람들은 56k 모뎀을 쓰고, 800x600의 해상도를 유지합니다. 이들은 해상도나 인터넷의 속도를 업그레이드 할 수 있는 사실조차 모르고 있습니다.

 

텍스트는 뚜렷하게 강조하라
웹사이트 방문자들은 시각매체(graphics)보다도 관련문구를 가장 먼저 찾습니다. 또한 동영상, 사진, 플래시 등이 로딩될 때까지 잡아둘 수 있습니다. 시각매체는 텍스트로 표현이 부족할 때만 사용하는 것이 좋습니다. 심플하게 만들어 로딩속도를 줄이는 것도 중요합니다.

 

심플하고 일관성 있는 네비게이션을 제공하라
웹사이트를 운영하는 입장에서는 평균적으로 방문당 보통 2~3개 페이지를 봐주길 원합니다. 컨텐츠의 흥미도 관련이 있겠으나 네비게이션도 큰 영향을 미칩니다. 방문자가 원하는 곳에 최대한 빨리 데려다 줄 수 있어야 합니다.

 

웹표준을 존중하라

파랑색 밑줄은 하이퍼링크 이며 “여기를 클릭하세요”라는 뜻입니다. 파랑색 밑줄을 다른 곳에 사용해서 방문자를 헷갈리게 해서는 안됩니다. 네비게이션 링크는 모든 페이지의 위쪽 또는 왼쪽에 일관성 있게 표시되어야 하며 적절한 카테고리 설정도 중요합니다.

 

스크롤은 없을수록 좋다
스크롤이 꼭 들어가야 한다면, 세로축 스크롤만 넣어야 합니다. 가로축 스크롤은 절대적으로 없어야 하며 중요한 정보는 스크롤 되기 전에 보여져야 합니다.

 

알기 쉽고 명백하게 표기하라
방문자에게 정보를 쉽게 전달될 수 있도록 도와주어야 합니다. 흰색 바탕은 로딩속도가 빠르며, 정보가 깔끔하게 보여집니다. 라벨은 헷갈리지 않는 문구로 간결하게 설명되어야 하겠습니다. 기억하세요!? 찾을 수 없는 정보는 없는 것과 다를 게 없습니다.

 

길을 잃게 하지 마라
당신이 아무런 표지판도 없는 대형마트에서 쇼핑 중에 길을 잃었다고 상상해 보십시오. 가정용품은 어디 있지? 계산대는 어디 있지? 화장실은?... 웹도 마찬가지 입니다. 모든 페이지에서 쉽고 간편한 네비게이션이 있어야 하며 “뒤로가기” 버튼을 사용하지 않게 해야 합니다. 메뉴를 찾기 위해서 헤매지 않게 하십시오.

 

내부 검색어는 빠르고 정확하게
대부분의 소비자들은 내부 검색을 활용하지 못하며, 검색기능 또한 검색하고자 하는 결과를 제공하지 못하고 있습니다. 하지만 검색기능이 중요한 사이트라면, 꼭 검색기능을사용해야 한다면, 검색하는 방법 소개와 정말로 검색이 되는 검색엔진을 제공하십시오.
너무 많은 결과물이 나오거나 검색기능이 제대로 작동 하지 않는 다면 고객을 잃을 수 있습니다.

 

인터넷에 숙달된 방문자는 많지 않다
플러그인을 다운로드 하게 하지 마십시오. 대부분의 소비자들은 그것이 무엇인지 모르며, 알고있다 하더라도 기존의 익숙한 방식이 아니면 사용하기를 거부 합니다. 제공자의 입장에서는 ‘획기적인 아이템이다’라고 생각할 수 있으나 다운로드와 복잡한 과정이 존재 한다면, 특히 결제 프로세스에서는 구매를 포기할 수도 있습니다. 심플하고, 간결한 설명, 그리고 도움이 되는 가이드 툴을 사용하여 결제 프로세스를 구축하는 것이 포인트 입니다.

 

테스트는 중요하다
방문자들은 항상 의심합니다. 틀린 문법, 스크린오류 메시지, 열리지 않는 이미지, 브라우저 호환성 등등 모든 것에 오류가 없어야 합니다. 신뢰도와 직접적으로 관련이 되기 때문입니다. 테스트를 게을리 하지 말아야 합니다. 훌륭한 웹사이트의 브랜드는 사용자의 경험을 바탕으로 완성됩니다.

 

‘TOP100 WEB SITE’ 에 속한 웹사이트의 공통점

  • 빠른 다운로드 속도
  • 많지 않은 시각매체
  • 프레임 없음(no frames)
  • 비슷한 네비게이션 시스템
  • 넓은 흰색 바탕에 강조된 텍스트
  • 표준에 따른 파랑색 밑줄 링크
  • 백그라운드 이미지 없음
  • 자바스크립 사용은 아주 적음
  • DHTML 사용 안함
  • 팝업 페이지 없음
  • 견고한 데이터베이스 시스템

파일쓰기....

헐.. ASP를 처음 하다 보니.. 이런것도 기록하게 되는고나..--;

 

<%

Function savelog(msg, filename)
    Dim log_dir, log_filename, del_date, del_filename

    log_dir = "D:\log"
    log_filename = log_dir & "\" & Year(now) & Right("0" & Month(now), 2) & Right("0" & Day(now), 2) & ".txt" '날짜별 기록
 
    Set fso = Server.CreateObject("Scripting.FileSystemObject")

    If fso.fileExists(log_filename) Then
        Set out = fso.OpenTextFile(log_filename, 8, true)
    Else
        Set out = fso.CreateTextFile(log_filename, true)
    End If
 
    out.write("[" & Now & "]\t")
    out.writeLine(msg)
    out.close

   

    '30일 이전체크 후 지난 파일 삭제
    del_date = DateAdd("d", -30, Date())
    del_date = Replace(del_date, "-", "")
    del_filename = log_dir & "\" & del_date & ".txt"


    If fso.fileExists(del_filename) Then
        fso.DeleteFile(del_filename)
    End if

 
    Set out = Nothing
    Set fso = Nothing
End Function

 

Call savelog("filename", "message")

 

%>

ASP 쿼리문 실행시 결과값 받아오기

sql = "insert into XXXXX ............"
on error resume next
con.execute(sql)
           
if Err.Number <> 0 then
   orderOk = "FALSE"
   Err.Clear
else
   orderOK = "TRUE"
end if
on error goto 0

================================================================================


sql = "insert into XXXXX ............"
con.execute(sql), Result
           
if Result = 1 then
   orderOK = True;

else
   orderOK = False;

end if

WSDLReader 오류

오류내용

WSDLReader:XML Parser failed at linenumber 0, lineposition 0, reason is:
지정한 리소스 다운로드에 실패했습니다. HRESULT=0x1: 잘못된 기능입니다. -
WSDLReader:Loading of the WSDL file failed HRESULT=0x80070057: 매개 변수가
틀립니다. - Client:One of the parameters supplied is invalid.
HRESULT=0x80070057: 매개 변수가 틀립니다.


 

ISA 서버에서 적절하게 프록시서버가 구성되어있지 않아서 해당 로컬 컴퓨터 인증이 실패 할 수 있다.

 

아래 구문을 mssoapinit 위에 넣어보고 테스트

client.ClientProperty("ServerHTTPRequest") = True

 

그래도 안되면 다음 레지스트리 키를 삭제.

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
     CurrentVersion\Internet Settings\Connections\WinHttpSettings

 

참고사이트 :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/proxycfg_exe__a_proxy_configuration_tool.asp

 

Response 버퍼 제한 초과됨 - metabase.xml

ASP계열 웹 컴포넌트로 파일업로드/다운로드시 발생할수 있다.

 

오류메시지

Response 버퍼 제한 초과됨


 

1. IIS 6(인터넷 서비스 관리자)를 중지시킨다.

   (컴퓨터 선택 후 오른쪽 마우스 클릭 -> 모든작업 -> IIS 다시 시작을 클릭 후 중지 선택)

 

2. c:\windows\system32\inetsrv\MetaBase.xml 파일을 메모장 등으로 연다.

   AspMaxRequestEntityAllowed="204800000" <- 업로드 용량제한을 200MB로 설정한 예

   AspBufferingLimit="204800000" <- 다운로드 용량제한을 200MB로 설정한 예

 

3. MetaBase.xml을 저장하고 그 다음 IIS 6를 시작한다. (IIS 다시 시작을 클릭 후 시작 선택)

IE7 excel 파일 다운로드

<?

 

header( "Content-type: application/vnd.ms-excel; charset=euc-kr");
header( "Content-Disposition: attachment; filename=목록.xls" );
header( "Content-Description: PHP4 Generated Data" );
print("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel; charset=euc-kr\">");

 

?>

ajax encode, decode

JavaScript --> PHP

encodeURIComponent( string ) --> iconv( "UTF-8", "CP949", rawurldecode($string ) )

 

PHP --> JavaScript

rawurlencode( iconv( "CP949", "UTF-8", $string ) ) --> decodeURIComponent( string )

cvs parsing

function csv_explode($str, $delim = ',', $qual = "\"")
{
    $len = strlen($str);
    $inside = false;
    $word = '';

    for($i = 0; $i < $len; ++$i)
    {
        if($str[$i] == $delim && !$inside)
        {
            $out[] = $word;
            $word = '';
        }
        else if($inside && $str[$i] == $qual && ($i < $len && $str[$i + 1] == $qual))
        {
            $word .= $qual;
            ++$i;
        }
        else if($str[$i] == $qual)
        {
            $inside = !$inside;
        }
        else
        {
            $word .= $str[$i];
        }
    }

    $out[] = $word;
    return $out;
}

date_diff

function date_diff($sdate, $edate)
{
 $_sdate = explode("-", $sdate);
 $_edate = explode("-", $edate);

 $tmp1 = mktime(0, 0, 0, $_sdate[1], $_sdate[2], $_sdate[0]);
 $tmp2 = mktime(0, 0, 0, $_edate[1], $_edate[2], $_edate[0]);

 return($tmp2 - $tmp1) / 86400 + 1;
}

xdebug sample

<?

/*
xdebug 1.3.2

xdebug_get_function_stack
xdebug_call_class
xdebug_call_function
xdebug_call_file
xdebug_call_line
xdebug_var_dump
xdebug_enable
xdebug_disable
xdebug_is_enabled
xdebug_start_trace
xdebug_stop_trace
xdebug_get_function_trace
xdebug_dump_function_trace
xdebug_time_index
xdebug_start_code_coverage
xdebug_stop_code_coverage
xdebug_get_code_coverage
xdebug_start_profiling
xdebug_stop_profiling
xdebug_dump_function_profile
xdebug_get_function_profile
xdebug_dump_superglobals


xdebug.auto_profile   Off
xdebug.auto_profile_mode 0
xdebug.auto_trace   Off
xdebug.collect_params  Off
xdebug.default_enable  On
xdebug.dump.COOKIE
xdebug.dump.ENV
xdebug.dump.FILES
xdebug.dump.GET
xdebug.dump.POST
xdebug.dump.REQUEST
xdebug.dump.SERVER
xdebug.dump.SESSION
xdebug.dump_once   On
xdebug.dump_undefined  Off
xdebug.manual_url   http://www.php.net http://www.php.net
xdebug.max_nesting_level 64
xdebug.output_dir   /tmp

xdebug.remote_enable  Off
xdebug.remote_handler  gdb
xdebug.remote_host   localhost
xdebug.remote_mode   req
xdebug.remote_port   17869
*/

ini_set("xdebug.auto_profile", 1);
ini_set("xdebug.auto_profile_mode", 1);
ini_set("xdebug.max_nesting_level", 64);

function xdebug_start()
{
 xdebug_load();

 if(!xdebug_is_enabled())
  xdebug_enable();

 xdebug_start_profiling();
}

function xdebug_stop()
{
 xdebug_dump_function_profile(4);
 xdebug_stop_profiling();
}

/*******************************************************************************
* php.ini - extension_dir=./ 으로 설정되어 있어..--;
*******************************************************************************/
function xdebug_load()
{
 $module = "/usr/local/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so";

 $dir[e]  = ini_get("extension_dir");
 $dir[u]  = dirname($_SERVER[PATH_TRANSLATED]) . "/";
 $dir[ut] = preg_replace(";[^/]+;", "..", $dir[u]);
 
 if(preg_match(";^/;", $dir[e]))
  $dir[e] = preg_replace(";[^/]+;", "..", $dir[e]);
 else
  $dir[e] = "";

 if(preg_match(";^/;", $module))
 {
  if(!$dir[e])
   $file = $dir[ut] . $module;
  else
   $file = $dir[e] . $module;
 }
 else
 {
  if(!$dir[e])
   $file = $module;
     else
   $file = $dir[e] . $dir[u] . $module;
 }

 if(is_file($file))
 {
  $ext = str_replace(".so", "", basename($file));
     if(!extension_loaded($ext))
   @dl($file);
 }

 if(!extension_loaded($ext))
  echo $file . " load fail!!";
}

?>

xdebug install

1. source install


shell> cd /gsp/install/xdebug-2.0.0
shell> ./configure --enable-xdebug
shell> make
shell> cd module
shell> cp cp xdebug.so /gsp/server/php5/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so

2. php설정


 vi /gsp/server/php5/lib/php.ini
zend_extension=/gsp/server/php5/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = /gsp/log/xdebug

3. 아파치 restart

4. phpinfo에서 xdebug확인
--------------------------------------------------------------------------------------------------

xampp에 xdebug 컴파일해서 추가하기

 

1. 먼저 xampp를 설치


1) XAMPP Linux 1.6.1를 http://www.apachefriends.org/download.php?xampp-linux-1.6.1.tar.gz에서 다운 ,
tar xvfz xampp-linux-1.6.1.tar.gz -C /opt로 설치
2) Development package를 http://www.apachefriends.org/download.php?xampp-linux-devel-1.6.1.tar.gz에서 다운,
tar xvfz xampp-linux-devel-1.6.1.tar.gz -C /opt 로 설치하기 전 /opt/lampp/include를 백업하고 설치

사이트::http://www.apachefriends.org/en/xampp-linux.html

/opt/lampp/bin 를 PATH에 추가

xdebug는 php accelerator나 다른 디버거와 같이 사용할 수 없으므로 php.ini에서 지움.
Zend Optimizer, DBG, APC, APD, eaaccelerator.. etc

2. xdebug INSTALLATION FROM SOURCE
(참조: http://xdebug.org/install.php#debugclient)

최신버전 다운:: http://xdebug.org/link.php?url=xdebug200beta5
Xdebug from CVS
cvs -d :pserver:srmread@cvs.xdebug.org:/repository login
CVS password: srmread
cvs -d :pserver:srmread@cvs.xdebug.org:/repository co xdebug
This will checkout the latest development version which is currently 2.0dev.


3. COMPILING

php.net에서 설치된 php소스를 다운 받아서
/usr/src에 tar zxf php-4.4.6.tar.gz로압축을 풀고,
$mv php-4.4.6 php
$cp /usr/src/php /opt/lampp/include/php
$cd /opt/lampp/include/php
$./configure
$make
여기서 make install은 하지 않음!!

$cd /usr/src
$wget http://xdebug.org/link.php?url=xdebug200rc3
$tar -xzf xdebug-2.0.x.tgz.
$cd xdebug*
$phpize (이 명령이 안먹히면 /opt/lampp/bin/phpize).
$ ./configure --enable-xdebug --with-php-config=/opt/lampp/bin/php-config if php-config

여기서 실패시 다음과 같이 나오면:
../configure: line 1960: syntax error near unexpected token
`PHP_NEW_EXTENSION(xdebug,'
../configure: line 1960: ` PHP_NEW_EXTENSION(xdebug, xdebug.c
xdebug_code_coverage.c xdebug_com.c xdebug_handler_gdb.c
xdebug_handler_php3.c xdebug_handlers.c xdebug_llist.c xdebug_hash.c
xdebug_profiler.c xdebug_superglobals.c xdebug_var.c usefulstuff.c,
$ext_shared)'
---> php버전이 xdebug와 맞지 않음.

다음 오류가 나오면:
configure: line 1145: PHP_INIT_BUILD_SYSTEM: command not found
configure: line 1151: syntax error near unexpected token `config.nice'
configure: line 1151: `PHP_CONFIG_NICE(config.nice)'
--> autotools를 업그레이드 하라 (autoconf, automake and libtool) or install the known working versions: autoconf-2.13, automake-1.5
and libtool-1.4.3.

$make
(메세지에서 아래 사항을 확인하여 버전이 맞는 가 확인)
4.4.x 20020918 20020429 20050606 2.0.0-rc1 or cvs
5.1.x 20041225 20050922 220051025 2.0.0-rc1 or cvs
5.2.x 20041225 20060613 220060519 2.0.0-rc1 or cvs

$cp modules/xdebug.so /opt/lampp/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so
(xampp의 extensions는 이곳임. 가능한 이곳에 저장하는 것이 뒤에 머리가 덜 아픔)

4. CONFIGURE PHP TO USE XDEBUG
php.ini에 xdebug을 추가함으로 설치 끝

1) CLI, CGI or Apache 1.3 module을 사용하는 non-threaded use of PHP인 경우:
zend_extension=/opt/lampp/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so

2) Apache 2에 MPM or the the ISAPI module을 설치한 threaded usage of PHP인 경우
zend_extension_ts=/opt/lampp/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so

3) 중요:php를 자기가 컴파일로 설치 한 경우 zend_extension_debug=.를 사용하려면 --enable-debug옵션을 사용할 것

4) 아파치 재시작
/opt/lampp/lampp restart

5) xdebug로드 확인
phpinfo.php페이지를 열어서 xdebug를 확인



DEBUGCLIENT INSTALLATION


Unpack the Xdebug source tarball and issue the following commands:

$ cd debugclient
$ ./configure --with-libedit
$ make
# make install

This will install the debugclient binary in /usr/local/bin unless you don't have libedit installed on your system. You can either install it, or leave
out the "--with-libedit" option to configure. Debian 'unstable' users can install the library with apt-get install libedit-dev libedit2.

If the configure script can not find libedit and you are sure you have (and it's headers) installed correctly and you get link errors like the
following in your configure.log:

/usr/lib64/libedit.so: undefined reference to `tgetnum'
/usr/lib64/libedit.so: undefined reference to `tgoto'
/usr/lib64/libedit.so: undefined reference to `tgetflag'
/usr/lib64/libedit.so: undefined reference to `tputs'
/usr/lib64/libedit.so: undefined reference to `tgetent'
/usr/lib64/libedit.so: undefined reference to `tgetstr'
collect2: ld returned 1 exit status

you need to change your configure command to:

$ LDFLAGS=-lncurses ./configure --with-libedit

Run /opt/lampp/bin/phpize-x.x.x; use the version of phpize which corresponds to the version of PHP you want to install for.

 

--------------------------------------------------------------------------------------------------

http://www.ibm.com/developerworks/kr/library/os-php-fastapps2/index.html

전화번호 자동 하이픈 넣기

<?

function get_hyphen($hp)

{

   return preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $hp);

}

 

echo get_hyphen("01012345678");

 

?>