-- 테이블이 있을 때 처리 루틴
END ELSE BEGIN
-- 테이블이 없을 때 처리 루틴
END
시작 -> 프로그램-> MicroVisual .Net Studio 2003 -> Visual Studio .Net 도구 ->
Visual Studio .Net 2003 명령 프롬프트 실행
aspnet_regiis /i 를 입력하면 asp.net 1.1이 설치됨
폼에서 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 태그에는 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달
해당 웹사이트의 포트번호를 변경하면 다시 신고를 해야....된다...--;
뭐냐..--; 일을 하자는 건지 말자는 건지..--;
포트번호를 몇만게씩 계속변경하면??
몇만개 데이터를 다 막을꺼냐??
하여튼..울나라 공무원들..하는짓하고는...--;
일반적인 경과년수 구하는 수식은 다음과 같습니다.
=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 키로 수식을 입력해 줘야 합니다.
팀장이 팀원에게 제시하는 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가지 기술
저자 : John Maxwell
발행 : Warner Books (2003 . 4)
[MAIN IDEA]
더 좋은 방향으로 삶을 변화시키기 위해서는 좀더 효율적으로 생각하는 방법을 배울 필요가 있다. 효율적으로 생각하는 습관을 가질 수 있다면 삶을 근본적으로 바꿀 수 있다. 어떤 사람은 인생에서 성공을 거두는 반면 다른 사람들은 그렇지 못한 이유도 바로 여기에 있다. 즉 성공하는 사람들은 그렇지 못한 사람들과 완전히 다른 방식으로 생각한다. 그러므로 현재 내가 성공적이든 아니든 관계없이 긍정적으로 생각하는 습관을 가지고 이를 계속 실행에 옮길 수만 있다면 내가 종사하는 분야에서 얼마든지 최고가 될 수 있다.
좋은 사고습관은 성공하는 사람과 그렇지 못한 사람을 구분하는 가장 큰 특징이다. 성공하는 사람은 자신이 생각하는 바와 성취할 수 있는 것 사이의 관계를 뚜렷이 이해할 줄 안다. 자신이 생각하는 것을 조절하고 방향을 설정함으로써 성취하고자 하는 것까지도 조절할 수 있게 된다.
성공하는 사람들의 11가지 사고 기술
1. 언제나 큰 그림을 생각한다.
큰 그림을 볼 줄 아는 사람들은 당장 눈앞의 필요와 감정에 사로잡히는 일이 없이 세상을 위로부터 조망하는 능력을 갖고 있다. 이는 어떤 상황에서든 열린 마음을 갖고 새로운 아이디어와 가능성을 받아들일 마음의 준비가 돼 있음을 의미하는 것이다.
2. 생각에 초점을 가져야 한다.
생각에 초점을 잘 맞추는 사람들은 중요한 이슈에만 전념하고 그밖에 다른 사소한 일들은 모두 무시할 줄 안다. 이들은 자신들의 강점과 목표를 분명히 이해하므로 그로부터 거리가 있거나 우선순위가 낮은 일들 때문에 주어진 목표를 실행하지 못하는 일이 드물다.
3. 창조적으로 생각한다.
창조적으로 생각할 줄 아는 사람은 언제나 남들과는 다르게 생각하고 새로운 것을 받아들이는 데 주저하지 않는다. 창조성이란 리스크를 받아들이고 새로운 아이디어를 끊임없이 찾는 마음의 준비를 갖추고 있는 것을 의미한다.
4. 사고과정에 있어 현실성을 잃지 않는다.
창조적이고도 낙관적으로 생각하는 능력을 키우려면 사고에 있어 언제나 현실성을 잃지 않도록 해야 한다. 이를 꾸준히 하지 못한다면 결코 문제 해결을 한다거나 과거의 실수로부터 교훈을 얻지 못할 것이다.
5. 전략적 사고를 한다.
행동에 본격적으로 착수하기 전에 잠시 멈추고 전략적 사고를 시도해본다. 무엇을 먼저 해야 할지에 대해 생각하여 내가 기울이는 노력이 비생산적인 활동으로 낭비될 수 있는 가능성을 줄일 수 있다.
6. 가능성을 염두에 둔다.
가능성을 염두에 둔 사고란 현재 가능하지 않은 일이나 과거에 한 번도 시도되지 않았던 일에 대해서 생각하는 것을 의미한다. 이러한 종류의 사고를 함으로써 광범위한 옵션과 아이디어를 가능성의 영역으로 끌어들일 수 있다.
7. 과거 회귀형 사고를 시도한다.
과거 회귀형 사고란 내가 하는 일을 깊이 생각하고 이를 평가해보는 태도를 말한다. 이런 사고 태도는 요리로 비유하면 생각이 완전히 익을 때까지 푹 익히는 찜통 같은 역할을 한다.
8. 항상 지배적인 사고 방식에 의문을 제기한다.
일반적으로 받아들여지는 상식과 역행하는 것은 때로 상당한 자신감을 요하는 일이다. 그러나 그에 따른 보상은 엄청나게 클 수 있다. 내가 무슨 일을 할 때 단순히 남들이 하기 때문에 하고 있는 것이라면 잠시 멈춰 서서 내가 뭘 하고 있는지를 자문해 볼 필요가 있다.
9. 다른 사람들의 의견을 적극 받아들인다.
효과적 사고를 하는 사람들은 진정으로 도움이 될만한 아이디어를 내는 사람들을 귀중하게 여길 줄 안다. 성공의 가능성을 높이기 위해 다른 사람들의 아이디어를 내 생각에 적극 반영한다. 이는 내 생각을 더 다듬을 수 있을 뿐 아니라 더 나은 결과를 얻는 데도 도움이 된다.
10. 팀워크를 통한 사고과정을 시도해본다.
협력을 통한 사고란 이타적인 사고를 말한다. 협력적 사고는 내 자신의 문제에만 치중하지 않고 외향적 사고를 지향한다.
11. 분명한 목적의식을 갖는 사고를 한다.
목적의식을 갖는 사고는 반드시 돈과 관련된 것만은 아니다. 이는 내가 속한 조직의 목표를 생각하고 내가 지금 약속한 바를 제대로 이행하고 있는가를 평가하는 것을 의미한다. 이것이 진정한 목적의식을 갖는 사고이다.
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 또는 타사의 미디어 서버 소프트웨어를 개별적으로 설치할 수도 있습니다.
메일이 전체적으로 모두 발송이 안되는 것이 아니라
몇몇 포털 사이트에서는 반송 되고, 몇몇 사이트에서는 정상적으로 발송 되는 경우가 있다.
대부분 로그를 보면 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 등록
이 메시지는 현재 실행된 SELinux 정책이 그 응용프로그램의 동작을 허락하지 않기 때문.
SELinux 를 사용하지 않으려면 /etc/sysconfig/selinux 파일에서
SELINUX=enforcing
이 부분을
SELINUX=disabled
로 수정후 시스템을 리부팅.
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 -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] 파일은 이때 살아남
사용 중 추가하는 방법
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
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
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에서 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
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
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
명령만 실행하면 됨
<div id="left" style="float:left;"></div>
<!-- 주석 -->
<!-- 주석 -->
<div id="body" style="float;left;"></div>
위와 같이 2개의 주석이 들어가면 빈공간이 생기므로 div 사이 하나의 주석만 넣을 수 있도록.
<iframe allowTransparency="true">
iframe body
<body style="background-color:transparent">
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
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() - 현재의 년도를 나타낼때 쓰임
<%@ 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>
거부
# route add -host xxx.xxx.xxx.xxx reject
해제
# route del -host xxx.xxx.xxx.xxx reject
페이지 로딩 시간을 지켜라
훌륭한 사이트는 10초 안에 페이지 로딩이 완료됩니다. 어느 누구도 페이지를 보기까지 30초 이상 기다리지 않는다는 것을 기억하십시오. 본인의 웹사이트가 모든 사람들에게 보여지기를 원합니까? 아직도 많은 사람들은 56k 모뎀을 쓰고, 800x600의 해상도를 유지합니다. 이들은 해상도나 인터넷의 속도를 업그레이드 할 수 있는 사실조차 모르고 있습니다.
텍스트는 뚜렷하게 강조하라
웹사이트 방문자들은 시각매체(graphics)보다도 관련문구를 가장 먼저 찾습니다. 또한 동영상, 사진, 플래시 등이 로딩될 때까지 잡아둘 수 있습니다. 시각매체는 텍스트로 표현이 부족할 때만 사용하는 것이 좋습니다. 심플하게 만들어 로딩속도를 줄이는 것도 중요합니다.
심플하고 일관성 있는 네비게이션을 제공하라
웹사이트를 운영하는 입장에서는 평균적으로 방문당 보통 2~3개 페이지를 봐주길 원합니다. 컨텐츠의 흥미도 관련이 있겠으나 네비게이션도 큰 영향을 미칩니다. 방문자가 원하는 곳에 최대한 빨리 데려다 줄 수 있어야 합니다.
웹표준을 존중하라
파랑색 밑줄은 하이퍼링크 이며 “여기를 클릭하세요”라는 뜻입니다. 파랑색 밑줄을 다른 곳에 사용해서 방문자를 헷갈리게 해서는 안됩니다. 네비게이션 링크는 모든 페이지의 위쪽 또는 왼쪽에 일관성 있게 표시되어야 하며 적절한 카테고리 설정도 중요합니다.
스크롤은 없을수록 좋다
스크롤이 꼭 들어가야 한다면, 세로축 스크롤만 넣어야 합니다. 가로축 스크롤은 절대적으로 없어야 하며 중요한 정보는 스크롤 되기 전에 보여져야 합니다.
알기 쉽고 명백하게 표기하라
방문자에게 정보를 쉽게 전달될 수 있도록 도와주어야 합니다. 흰색 바탕은 로딩속도가 빠르며, 정보가 깔끔하게 보여집니다. 라벨은 헷갈리지 않는 문구로 간결하게 설명되어야 하겠습니다. 기억하세요!? 찾을 수 없는 정보는 없는 것과 다를 게 없습니다.
길을 잃게 하지 마라
당신이 아무런 표지판도 없는 대형마트에서 쇼핑 중에 길을 잃었다고 상상해 보십시오. 가정용품은 어디 있지? 계산대는 어디 있지? 화장실은?... 웹도 마찬가지 입니다. 모든 페이지에서 쉽고 간편한 네비게이션이 있어야 하며 “뒤로가기” 버튼을 사용하지 않게 해야 합니다. 메뉴를 찾기 위해서 헤매지 않게 하십시오.
내부 검색어는 빠르고 정확하게
대부분의 소비자들은 내부 검색을 활용하지 못하며, 검색기능 또한 검색하고자 하는 결과를 제공하지 못하고 있습니다. 하지만 검색기능이 중요한 사이트라면, 꼭 검색기능을사용해야 한다면, 검색하는 방법 소개와 정말로 검색이 되는 검색엔진을 제공하십시오.
너무 많은 결과물이 나오거나 검색기능이 제대로 작동 하지 않는 다면 고객을 잃을 수 있습니다.
인터넷에 숙달된 방문자는 많지 않다
플러그인을 다운로드 하게 하지 마십시오. 대부분의 소비자들은 그것이 무엇인지 모르며, 알고있다 하더라도 기존의 익숙한 방식이 아니면 사용하기를 거부 합니다. 제공자의 입장에서는 ‘획기적인 아이템이다’라고 생각할 수 있으나 다운로드와 복잡한 과정이 존재 한다면, 특히 결제 프로세스에서는 구매를 포기할 수도 있습니다. 심플하고, 간결한 설명, 그리고 도움이 되는 가이드 툴을 사용하여 결제 프로세스를 구축하는 것이 포인트 입니다.
테스트는 중요하다
방문자들은 항상 의심합니다. 틀린 문법, 스크린오류 메시지, 열리지 않는 이미지, 브라우저 호환성 등등 모든 것에 오류가 없어야 합니다. 신뢰도와 직접적으로 관련이 되기 때문입니다. 테스트를 게을리 하지 말아야 합니다. 훌륭한 웹사이트의 브랜드는 사용자의 경험을 바탕으로 완성됩니다.
‘TOP100 WEB SITE’ 에 속한 웹사이트의 공통점
헐.. 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")
%>
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
오류내용
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
ASP계열 웹 컴포넌트로 파일업로드/다운로드시 발생할수 있다.
오류메시지
1. IIS 6(인터넷 서비스 관리자)를 중지시킨다.
(컴퓨터 선택 후 오른쪽 마우스 클릭 -> 모든작업 -> IIS 다시 시작을 클릭 후 중지 선택)
2. c:\windows\system32\inetsrv\MetaBase.xml 파일을 메모장 등으로 연다.
AspMaxRequestEntityAllowed="204800000" <- 업로드 용량제한을 200MB로 설정한 예
AspBufferingLimit="204800000" <- 다운로드 용량제한을 200MB로 설정한 예
3. MetaBase.xml을 저장하고 그 다음 IIS 6를 시작한다. (IIS 다시 시작을 클릭 후 시작 선택)
<?
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\">");
?>
JavaScript --> PHP
encodeURIComponent( string ) --> iconv( "UTF-8", "CP949", rawurldecode($string ) )
PHP --> JavaScript
rawurlencode( iconv( "CP949", "UTF-8", $string ) ) --> decodeURIComponent( string )
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;
}
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 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!!";
}
?>
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");
?>