2011년 12월 19일 월요일

PHP 변수관련함수

조건에 따른 분기문
연산자 ?:
사용예 ( $a == 1 ) ? "one" : "all"


constant( "SERVER_" . $value )
$value 문자열의 이름을 갖는 상수의 값을 반환

ctype_alnum( string text )
( text문자열이 알파벳 || 숫자 )? true : false

ctype_alpha( string text )
( text 문자열이 알파벳 ) ? true : false

ctype_cntrl( string text )
( text 문자열이 제어문자( 엔터( \n ), 탭( \n ) ) ) ? true : false

ctype_digit( string text )
( text 문자열이 숫자 ) ? true : false

ctype_graph( string text )
( text 문자열이 눈에 보이는 문자( 탭( \t ), 엔터( \n ), 공백 제외 ) ) ? true : false

ctype_space( string text )
( text 문자열이 눈에보이지 않는 문자 ( 엔터, 탭, 공백 )) ? true : false

ctype_lower( string text )
( text 문자열이 알파벳 소문자 ) ? true : false

ctype_upper( string text )
( text 문자열이 알파벳 이면서 대문자 ) ? true : false

ctype_print( string text )
( 출력할수 있는 문자( 공백포함 ) 제어문자( \n, \t ) 제외 ) ? true : false

ctype_punct( string text )
( text 문자열이 기호문자 ) ? true : false

ctype_xdigit( string text )
( text 문자열이 16진수 문자( 알파벳 소문자 a~f, 숫자형 문자 ) ) ? true : false

2011년 11월 9일 수요일

iframe안의 element에 접근하자.

출처 http://atple.egloos.com/1791319


// 프레임 내부 접근
// frmId - 아이프레임 아이디
// frmObjId - 아이프레임 내부 객체 아이디

var frm = document.getElementById(frmId);
if (frm == null) return;

var fDoc = frm.contentWindow || frm.contentDocument;
if (fDoc.document) {
fDoc = fDoc.document;
}

//여기서부터 갖고 노는거닷!!
fDoc.getElementById(frmObjId).focus();



contentWindow - ie, ff
contentDocument - safari, opera

2011년 10월 27일 목요일

데이터 공급자나 기타 서비스가 E_FAIL 상태를 반환했습니다.

Microsoft Cursor Engine 오류 '80004005'
데이터 공급자나 기타 서비스가 E_FAIL 상태를 반환했습니다.

구글링중..

"데이터 공급자나 기타서비스가 E_FAIL상태를 반환하였습니다"

라는 메시지가 출력된다면................................

십중팔구.........NULL 문자 때문일것이다.

특히 날짜 필드나 시간 필드에 값이 없을때 발생하는 문제이다.

NULL 처리만 해주면 에러를 제거할 수 있다.

즉, 입력 값이 없을때 빈문자("")를 넣어서 레코드를 기록하면 된다.


요걸 발견해서 적용해 봤는데 ..

안됨 ㅋㅋ

날짜필드에 null 값과 1이라는 값이 들어가 있어서 그게 문제인가 했지만 아님.ㅋ


조인을 잘못할경우 그렇다는 내용도 있었지만 조인을 하지 않은 상태에서 문제가 나온거라서

해당사항 없었음..


쿼리문제인거 같아서 확인결과

조건에 in('') 사용시 in('A') 의경우 위의 오류가 발생하고, in('A', 'B') 의 경우 아무문제 없이 잘됨.


,'' 을 추가해서 처리함 ~ 꼼수 ㅋㅋ

in사용시 주의점


고객지원은 어려운소리함.ㅋ http://support.microsoft.com/kb/241794/ko


인덱스

인덱스는 기본적으로 생성해두는것이 효율성에 좋습니다.
데이터가 적을 경우는 기본적인 인덱스로 결과를 출력할 수 있도록 하고, 데이터가 많아질 수록 쿼리에 맞는 인덱스를 걸어주면 효율적입니다.

인덱스는 일반적으로 한 테이블당 5개전후로 많이 잡습니다. 그 이상을 걸면 데이터의 양에 오히려 좋지 않은 영향을 줄 수 있기 때문입니다.

인덱스는 기본적으로 전체 테이블의 10%정도를 가져오는데 효과적입니다.
하지만 1000만건중에 100만건을 가져오는데는 인덱스가 효과적이라고 보기는 힘들지만 기본적은 인덱스는 필수입니다.

현재 느리다고 생각되는 쿼리가 있다면 다음의 과정으로 인덱스를 만들어보세요.

1. 쿼리 분석
현재 이 서버에 돌아가고 있는 쿼리를 알기 위해 다음을 실행합니다.
select * from master..syscacheobjects
sql이란 부분에 현재 캐시되어있는 쿼리가 보입니다.
이 쿼리들을 돌려가며 느리다고 느껴지는 쿼리를 찾습니다.

2. 기본 인덱스, 부하가 걸리는 인덱스를 체크
sp_helpindex A
이 명령으로 A테이블의 인덱스를 찾을 수 있습니다.

3. 인덱스 생성
create index A_ix01 on A(aa)
처음엔 고유증가 번호등의 잘 변하지 않는 필드를 Clustered Primary Key로 잡아야 합니다. 최종적으로 데이터를 찾아가는 길을 만들기 위함입니다. 이게 없으면 전체를 메모리에 띄워야 하기 때문에 많은 리소스를 잡아먹습니다.
Join문과 Where에서 찾는 필드명은 index로 걸어주는 것이 좋습니다. text등의 900바이트가 넘는 데이터는 index가 생성이 되지 않으니 주의 하세요.
index를 걸어줄 때 필드를 여러개를 한번에 지정하는 방법이 있고 한개씩 여러번 지정하는 방법이 있습니다.

1. 한번에 여러개를 지정하는 방법의 예:
create index A_ix01 on A(aa, bb)


2. 한개씩 여러번 지정하는 방법의 예:
create index A_ix01 on A(aa)
create index A_ix02 on A(bb)


위의 방법은 aa순으로 정렬된 뒤에 bb순으로 정렬하는 것입니다. 때문에 where절등에서 bb를 먼저찾거나 bb만 찾게 되는 경우 위의 인덱스는 타지 않습니다.
( 2번 - 한번에 한개씩 지정하는 경우 )

대신 아래처럼 한개씩 여러번 지정하는 것에 비해 aa,bb순으로 찾는 경우 가장 빠른 효율을 줍니다.( 1번 - 한번에 여러개 지정의 경우 )

따라서 위방법과 아래방법은 전혀 다른 인덱스가 됩니다.
참고하면서 만드세요.

4. 테스트
인덱스를 만들어가면서 대량의 데이터의 쿼리를 돌려봅니다.
인덱스를 바꿔가면서 가장 맞는 인덱스를 생성합니다.
최초로 돌릴 경우는 메모리에 올리는 시간 때문에 느릴 수 있습니다. 때문에 쿼리를 여러번 돌린후 마지막 시간을 재는게 좋습니다.

5. 불필요한 인덱스 삭제
drop index AA.AA_ix01
반드시 테이블명.인덱스명 의 형식으로 지워야 지워집니다.

* syscacheobjects에 비슷한 쿼리가 많다면 그 쿼리는 Static SQL을 이용하는 것이 좋습니다. Static SQL을 이용하면 같은 쿼리의 변수만 바뀌는 식의 쿼리를 하나의 쿼리로 인식하여 처리하므로 비슷한 캐시를 줄여 캐시를 활용할 공간이 넓어집니다.


출처 : http://www.littleworld.net/ai/kmod.asp?no=497&isn=&mymsg=creat

mssql index 인덱스

-- 현재 등록된 인덱스 조회

-- 형식: sp_helpindex 테이블명

sp_helpindex tableName


-- 현재 등록된 인덱스 조회

-- 형식: DROP INDEX 테이블명.인덱스명

DROP INDEX tableName.idx



-- 인덱스 생성

CREATE INDEX idx ON 테이블명(인덱스 순서)

CREATE INDEX ind ON tableName(fieldName1 asc, fieldName2 asc, fieldName3 desc, fieldName4 asc)

서버 운영 체제 확인 사이트

서버 운영 체제 확인 사이트

http://uptime.netcraft.com/up/graph/?host=호스트주소

http://uptime.netcraft.com/up/graph/?host=google.com

2011년 10월 26일 수요일

filezilla 오류: 디렉터리 목록 조회 실패

파일질라 : 편집 > 설정 > FTP > 전송모드 능동형으로


자신(ftp client pc)의 컴퓨터 : 시작 > 제어판 > 윈도우방화벽 > 고급설정 > 인바운드 > 추가 > ftp client 프로그램 추가

포터블 설치시 포터블 파일 이동하면 인바운드에서 파일질라 프로그램 경로 변경하여야함.

replace 함수의 인수 1에 대한 인수 데이터 형식 text이(가) 잘못되었습니다.

text 형식 replace() 사용시 오류 해결방법

UPDATE
테이블명
SET
수정할 컬럼명 = replace(수정할 컬럼명, '변경할 문자', '변경될 문자)
WHERE
수정할 컬럼명 LIKE '%변경할 문자%'

replace 함수의 인수 1에 대한 인수 데이터 형식 text이(가) 잘못되었습니다.

컬럼 형식이 text 형식일 경우 위의 오류가 발생함.
(text, ntext 형식이 오류 발생한다고함.. )


UPDATE
테이블명
SET
수정할 컬럼명 = replace ( convert ( varchar ( max ) , 수정할 컬럼명 ) , ' 변경할 문자 ' , ' 변경될 문자 ' )
WHERE
수정할 컬럼명 LIKE ' % 변경할 문자 % '

update tableName set columnName = replace(convert(varchar(max), columnName ), 'aaa', 'bbb') 
where columnName like '%aaa%'


UPDATETEXT 란 놈을 찾았으나 복잡해 ㅋㅋ 2005이후 버전에서 안된다해서 
찾아보니 convert 하니까 됨 ㅋㅋ

UPDATETEXT [BULK] { table_name.dest_column_name dest_text_ptr }
 { NULL | insert_offset }      
 { NULL | delete_length }      
 [ WITH LOG ]
 [ inserted_data | { table_name.src_column_name src_text_ptr } ]
참고 : http://msdn.microsoft.com/ko-kr/library/ms189466.aspx



2011년 10월 24일 월요일

javascript 객체유무 판단

try {
// 객체가 있을경우 처리부분.
var a = document.frmLogin.user_id;
a.focus();

} catch(exception) {
// 객체가 없을경우 처리부분.

}




서버 운영체제 확인 사이트

http://uptime.netcraft.com/up/graph/?host=호스트주소

ex) http://uptime.netcraft.com/up/graph/?host=google.com




2011년 9월 16일 금요일

mssql replace()

mssql replace()

UPDATE useTable
SET column1 = REPLACE(column1, 'a', 'b')
WHERE column1 LIKE '%a%'

update 테이블명
set 변경한내용이있는 컬럼명 = replace(컬럼명, '변경 대상 문자', '변경할문자')
where 컬럼명 like '%변경 대상 문자%'

where 절이 없을경우 모든 테이블을 검색하므로 느려짐.

2011년 6월 30일 목요일

ASP 네트워크 드라이버 설정(IIS에서 네트워크상의 서버로 연결하기)

웹서버 (IIS가 설치된 서버, ASP파일을 생성할 서버 컴퓨터)
파일서버 (웹서버를 사용하여 실제 파일을 저장할 서버 컴퓨터)


웹서버 와 파일서버 에서 사용자 추가

[관리도구] - [컴퓨터관리] > 로컬 사용자 및 그룹 에서 사용자 추가

사용자 이름 : FileServerUser
암호 : 1234567a

암호 변경할 수 없음 - 체크
암호 사용 기간 제한 없음 - 체크

생성된 계정의 그룹은 User그룹을 삭제하고, Guests 그룹으로 추가함.

[관리도구] - [로컬 보안 정책]
로컬 정책 > 사용자 권한할당 > 로컬로 로그온 - 해당사용자 추가.


위의 사용자 추가 작업을 파일서버에서도 동일하게 처리해준다..

(양쪽에 똑같은 사용자를 만들고 권한을 준다음 접근을 하면 접근당한쪽에서는 자신의
로컬에 같은 계정이 존재 하므로 IIS상에서도 접근이 가능하도록 한것이다.)


웹서버의 IIS 에서의 설정

사용하고자 하는 웹사이트의 속성 >
[디렉토리 보안] > 인증 및 액세스 제어 - 편집

사용자 이름 : 등록한 사용자 이름 FileServerUser
암호 입력 - 암호 재입력
Windows 통합 인증 - 체크


파일서버의 공유 설정

공유하고자 하는 폴더에서 속성 >

공유
이폴더를 공유 체크
사용권한 -등록한 사용자 추가 > 변경, 읽기 - 체크

보안
사용유저 추가 수정, 읽기, 쓰기 권한 허용 (모든권한)

사용방법

UNC 형식을 해당 폴더에 접근
\\파일서버명\공유푤더명\ 의 형식으로 접근..

MSSQL 소유자 변경 (schema)

/* mssql 2005 이전 버전 */
exec sp_changeobjectowner '유저명.objects명(테이블 또는 프로시져)','변경할 소유자명'

/* mssql 2005 */
alter schema 변경할 소유자명 transfer 유저명.objects명(테이블 또는 프로시져)

iframe 사용시 세션값이 안먹을때

iframe 사용시 세션값이 안먹을때

IIS
해당 사이트 속성 > HTTP 해더

사용자 지정 헤더 이름 :
P3P

사용자 지정 헤더 값 :
CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"

추가하면 됨.