[함수] __set(), __get() 활용..

글쓴이 kimsee 날 짜 08-02-28 16:58 조 회 2284 도움이 될 지 모르겠지만.. 이런 내용은 없는것 같아서.. 올려봅니다.. connect->query( $input ); $this->results[ $name ] = ( $output ) ? $output : false; } function __get ( $name ) { $output = ( $this->results[ $name ] ) ? $this->result[ $name ]->fetch_assoc() : false; return ( $output ) ? $output : false; } … } $db = new exam(); $db->test = ‘SELECT * FROM test’; echo ‘

‘;
print_r($db->test);
print_r($db->test);
print_r($db->test);
print_r($db->test);
echo ‘
‘; ?> DB 클래스(mysqli)의 경우입니다.. 위처럼 그냥 쿼리만 지정하면.. 값을 부를때는 결과가 나오죠.. 단순히 변수처럼 쿼리를 입력하면 결과를 불러오게 됩니다.. 코드도 간결해 지고.. 편하죠..

[스크립트] 드레그 & 드롭이 되는 메뉴 트리

이걸로 관리자쪽 메뉴트리 다 만들었습니다.

드레그 & 드롭이 되기때문에 메뉴 이동이 매우 편리합니다. ^^;

오픈소스라 맘껏 이용해도 됩니다.

API : http://www.dhtmlgoodies.com/index.html?whichScript=drag-drop-folder-tree

이동은 드레그 & 드롭하면 되고.. 삭제는 메뉴에 오른쪽 버튼을 누르면 DELETE 또는 RENAME을 할 수 있습니다.

소스는 첨부파일 참고


참고로 자스 스크립트가 테이블안에 있으면 IE에서는 오류납니다. 테이블이나

DIV 밖으로 빼십시오.

특정트리는 Nodrag Nodelete NoRename 속성을 추가할 수도 있습니다.

1103230740.zip


mysql UTF-8로 이전하기

[서버운영] utf-8 로 이전하기.[수정]  
 
 글쓴이   송효진  날 짜 07-12-17 11:15  조 회 613
 
 
utf-8 로 이전하기.


1. MySQL


– euckr 스키마 백업
mysqldump –all-databases –no-data –set-charset=euckr -p > backup.scheme.sql


– euckr 자료 백업
mysqldump –all-databases –no-create-db –set-charset=euckr -p > backup.data.sql


웬만하면 사용자계정 정보는 암호까지 확실하게 알고있자.
GRANT ALL 쿼리문을 직접 작성하여 가지고 있자.


– UTF-8 을 제대로 지원하기 위해 버전을 5.x 로 올린다.
(varchar(1) 은 1byte 가 아닌 한글자를 의미하게 된다.
set names 만으로 클라이언트의 캐릭터셋을 맞출 수 있다.)
= backup.scheme.sql =
테이블 중 BLOB 형식이나 BINARY 속성 필드에 문자열이 들어가는 곳이 있다면,
TEXT 형식으로 바꾸거나 BINARY 속성을 없앤다.
DEFAULT \’0\’ 같은 잘못된 따옴표를 고친다.
TYPE=MyISAM 같은건 ENGINE=MyISAM 으로 수정한다.
맨 위쪽의 SET NAMES euckr 을 제외한 모든 CHARACTER SET 의 euckr 을 utf8 로 수정한다.


cat backup.scheme.sql | mysql -p


= backup.data.sql =
head backup.data.sql # 맨 위쪽에 SET NAMES euckr 이 있으면 충분하다.
cat backup.data.sql | mysql -p


– 사용자계정을 GRANT ALL 문으로 다시 만들어준다.
root 지워버리지 않게 주의.



이전 MySQL 에 charset 관련 옵션이 없다면,
스키마는
cat backup.scheme.sql | mysql -p –default-character-set=utf8
데이터는
cat backup.data.sql | mysql -p –default-character-set=euckr
로 복구하면 된다.
스키마는 꼭 꼼꼼히 살펴보고 편집하자.



2. 파일
모든 파일의 내용을 utf8 로 바꾸자.
조건에 따라 동작이 달라지므로 php 를 이용하자.
/toutf.php
<?php


$f = $_SERVER[\’argv\’][1];
if(!file_exists($f)) {
    echo $f.\” file not found.\\n\”;
}


$text = file_get_contents($text);
$text8 = @iconv(\’CP949\’, \’UTF-8//IGNORE\’, $text);


$cnt = strlen($text);
$cnt8 = strlen($text8);
if($cnt <= $cnt8) {
    // 제대로 변경이 되었다면 용량이 커졌을 것이다.
    // 용량이 같다면 한글이 없는 것이다.
    rename($f, $f.\’.euckr\’); // 백업
    file_put_contents($f, preg_replace(\’/charset=euc-kr/i\’, \’charset=utf-8\’, $text8));
    echo $f.\” file is converted.\\n\”;
} else {
    // 용량이 작아진다면 잘못된 것이다.
    $fp = fopen(\’/error.txt\’, \’a\’);
    fwrite($fp, $f.\”\\n\“);
    fclose($fp);
}


?>


find /home -type f -name \”*.php\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.inc\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.txt\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.html\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.htm\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.js\” -exec php /toutf.php \”{}\” \\;
find /home -type f -name \”*.css\” -exec php /toutf.php \”{}\” \\;



현재 UTF-8 이 아닌 곳이 없기 때문에,
기억을 더듬어 대충 만들었다.
적용전 백업은 필수다.


에디터는 EmEditor, DreamWeaver CS3 를 추천한다.
FTP 는 WinSCP 4 를 추천한다. 윈도 커멘더 모드로 하면 파일명이 지X 같아도 잘 올리고 받아질 것이다.


WinSCP 의 에디터로 EmEditor 를 설정하면 무적이다.
EmEditor 는 기능이 조금 제한된 free 버전이 있다.
 
  License
본 게시물은 GPL을 따릅니다. [ GPL 안내 ]  
 
 


  
   송효진   07-12-17 11:19  
음… euckr 용 php 글자자르기 함수에 문제가 있을 수 있겠네요.


my.cnf 에서 default-character-set 만 잘 맞춰주면,
DB 접속시에 set names utf8 은 안해도 될겁니다.
그래도 php 에다 저거 한줄 추가하는게 속 편할것 같네요.  
 
음… euckr 용 php 글자자르기 함수에 문제가 있을 수 있겠네요.


my.cnf 에서 default-character-set 만 잘 맞춰주면,
DB 접속시에 set names utf8 은 안해도 될겁니다.
그래도 php 에다 저거 한줄 추가하는게 속 편할것 같네요.
        
   전진하는아르고   07-12-17 12:07  
여러 도메인을 사용할때를 대비해서 한줄추가가 가장 속 편한듯 싶네요.  
 
여러 도메인을 사용할때를 대비해서 한줄추가가 가장 속 편한듯 싶네요.
  
   신의손   07-12-17 11:26  
스크랩했습니다. 이번 서버업글때 써먹어야겠네요.. 좋은정보 감사합니다.^^  
 
스크랩했습니다. 이번 서버업글때 써먹어야겠네요.. 좋은정보 감사합니다.^^
  
   허생   07-12-17 11:27  
예전에 UTF-8로 이전할때 파일을 하나하나 따로 열어서 속성을 변경해줬던 기억이 있는데…
이렇게 한방에 해결가능하군요… 역시 무식하면 손발이 고생~  
 
예전에 UTF-8로 이전할때 파일을 하나하나 따로 열어서 속성을 변경해줬던 기억이 있는데…
이렇게 한방에 해결가능하군요… 역시 무식하면 손발이 고생~
  
   송효진   07-12-17 11:41  
생각해 보니 iconv 로 해야 원하는 동작이 되어 살짝 수정했습니다.  
 
생각해 보니 iconv 로 해야 원하는 동작이 되어 살짝 수정했습니다.
        
   전진하는아르고   07-12-17 12:08  
쩝 근데… 이왕이면 페이지속의 메타태그도… ㅎㅎㅎ  
 
쩝 근데… 이왕이면 페이지속의 메타태그도… ㅎㅎㅎ
            
   송효진   07-12-17 12:51  
그건 되어 있어요.ㅎㅎ  
 
그건 되어 있어요.ㅎㅎ
                  
   전진하는아르고   07-12-17 14:27  
헉… 글쿤요.. 착각했네요.. 요즘 착각을 자주하는걸 보니… 명퇴할때가 되었나 쩝…  
 
헉… 글쿤요.. 착각했네요.. 요즘 착각을 자주하는걸 보니… 명퇴할때가 되었나 쩝…
  
   x딜마   07-12-17 11:46  
좋은 정보 감사 드립니다.
개발 한것 UTF용으로 변환 할려고 계획중이었는데.. 쉽게 처리 될것 같네요.  
 
좋은 정보 감사 드립니다.
개발 한것 UTF용으로 변환 할려고 계획중이었는데.. 쉽게 처리 될것 같네요.
  
   전진하는아르고   07-12-17 12:11  
참고로 저는 euckr에서 옮길때 sql 화일 덤프 받아서 set names euckr 주고 utf8 이 아닌 문서로 올렸더니
에러가 생겼습니다. 그래서 아예 utf8로 sql 파일을 변경하고 올립니다.  
 
참고로 저는 euckr에서 옮길때 sql 화일 덤프 받아서 set names euckr 주고 utf8 이 아닌 문서로 올렸더니
에러가 생겼습니다. 그래서 아예 utf8로 sql 파일을 변경하고 올립니다.
        
   송효진   07-12-17 12:54  
euckr 로 하는 이유는,
흔하지는 않지만 euckr 의 멀티바이트 코드 마저 escape 시켜버리는 것이 있습니다.
예를 들자면, ㅂㅞㄺ 인데 ?\\\’? 이런식이랄까요?
이건 변환이 안되지요.
그런데, euckr 로 넣으면 원래 그런 escape 기 때문에 동작을 합니다.
아마 오류가 스키마에서 났을듯 합니다.
예제에서처럼 분리하여 해 보시면 문제 없을듯 하네요.  
 
euckr 로 하는 이유는,
흔하지는 않지만 euckr 의 멀티바이트 코드 마저 escape 시켜버리는 것이 있습니다.
예를 들자면, ㅂㅞㄺ 인데 ?\\\’? 이런식이랄까요?
이건 변환이 안되지요.
그런데, euckr 로 넣으면 원래 그런 escape 기 때문에 동작을 합니다.
아마 오류가 스키마에서 났을듯 합니다.
예제에서처럼 분리하여 해 보시면 문제 없을듯 하네요.
  
   낭망백수   07-12-17 12:35  
전체적으로
버전 5.x 로의 이전에 해당하는 것과 UTF-8로의 이전에 해당하는 것을 좀 가릴 필요가 있겠는데요.
그리고 이왕이면 각 수정항목에 대한 설명도. ^^;;;


진짜 궁금한건 BINARY 를 왜 없애야하는지 궁금합니다.
전부터 궁금했는데 아직도 이유를 모르겠네요. 매뉴얼이나 MySQL 사이트설명도 애매하고. ㅋ


제가 생각하는 제일 간단한 방법은 밀어넣을때 setCharacter 지정하는 것이아니라
밀어넣는 것은 그대로 걍 sql로 밀어넣고
신버젼의 Database 만(스키마없이) UTF-8 로생성하고 나머지 그대로 걍 다 밀어넣는것입니다.
들어갈때 알아서 UTF-8 바뀌더군요.
(BINARY 는 바꾸지 않았는데 괜찮더군요. 앞으로 무슨 문제가 있을지 모르겠지만 ㅡㅡ;;)


꾸벅~!  
 
전체적으로
버전 5.x 로의 이전에 해당하는 것과 UTF-8로의 이전에 해당하는 것을 좀 가릴 필요가 있겠는데요.
그리고 이왕이면 각 수정항목에 대한 설명도. ^^;;;


진짜 궁금한건 BINARY 를 왜 없애야하는지 궁금합니다.
전부터 궁금했는데 아직도 이유를 모르겠네요. 매뉴얼이나 MySQL 사이트설명도 애매하고. ㅋ


제가 생각하는 제일 간단한 방법은 밀어넣을때 setCharacter 지정하는 것이아니라
밀어넣는 것은 그대로 걍 sql로 밀어넣고
신버젼의 Database 만(스키마없이) UTF-8 로생성하고 나머지 그대로 걍 다 밀어넣는것입니다.
들어갈때 알아서 UTF-8 바뀌더군요.
(BINARY 는 바꾸지 않았는데 괜찮더군요. 앞으로 무슨 문제가 있을지 모르겠지만 ㅡㅡ;;)


꾸벅~!
        
   송효진   07-12-17 12:54  
BINARY 는 말 그대로 바이너리 입니다.
캐릭터 취급을 안하지요. 캐릭터셋 변환이 안되요.
구 버전에서 BINARY 를 썼던 이유중 가장 큰것이,
latin1 으로 해서 정렬이 엉망이 되기 때문이었지요.


5.x 는 필수라고 생각해서 나누지는 않고 당의성에 대한 설명을 추가했습니다.  
 
BINARY 는 말 그대로 바이너리 입니다.
캐릭터 취급을 안하지요. 캐릭터셋 변환이 안되요.
구 버전에서 BINARY 를 썼던 이유중 가장 큰것이,
latin1 으로 해서 정렬이 엉망이 되기 때문이었지요.


5.x 는 필수라고 생각해서 나누지는 않고 당의성에 대한 설명을 추가했습니다.
            
   낭망백수   07-12-17 13:02  
그럼 binary packing 이 어떻게 이루어지는지 궁금하군요. unpacking 은?
(그런데 왜 저는 제대로 나올까요? ㅡㅡ;)


ps; 짐 free emeditor 기능제한이 뭐죠? 쓰다가 적응안되서 포기한 1人  
 
그럼 binary packing 이 어떻게 이루어지는지 궁금하군요. unpacking 은?
(그런데 왜 저는 제대로 나올까요? ㅡㅡ;)


ps; 짐 free emeditor 기능제한이 뭐죠? 쓰다가 적응안되서 포기한 1人
                  
   송효진   07-12-17 13:12  
PostgreSQL 과는 개념이 조금 다릅니다.
pgsql 에서는 bytea 로 패킹을 하지만,
MySQL 에서는 패킹하는것이 아니고, 그냥 binary 취급만 해 주는 것입니다.
varchar(1) binary 는 1byte 를 의미하게 되겠죠.


utf-8 로의 이전시에 iconv 로 변환하거나 한 적이 없는데,
set names euckr 로 잘 들어갔다면,
php 에서도 set names euckr 인 상태가 아닌지 확인이 필요하겠습니다.


emeditor free 는 tools 없고 (diff 등), 탐X기 마우스 우클릭에 메뉴 없다는것 정도 입니다.
트레이 아이콘 제공도 안하던가…
기본적으로 utf-8 이 아니기 때문에 옵션은 조금 손봐줄 필요가 있습니다.
가장 좋게 생각하는 기능이 우하단의 현재 캐릭터셋 표시를 더블클릭하면,
바로 어떤 캐릭터셋으로든 다시 불러올 수 있다는 것입니다.
다른 이름으로 저장시에 어떤 캐릭터셋으로도 변환할 수 있고요.  
 
PostgreSQL 과는 개념이 조금 다릅니다.
pgsql 에서는 bytea 로 패킹을 하지만,
MySQL 에서는 패킹하는것이 아니고, 그냥 binary 취급만 해 주는 것입니다.
varchar(1) binary 는 1byte 를 의미하게 되겠죠.


utf-8 로의 이전시에 iconv 로 변환하거나 한 적이 없는데,
set names euckr 로 잘 들어갔다면,
php 에서도 set names euckr 인 상태가 아닌지 확인이 필요하겠습니다.


emeditor free 는 tools 없고 (diff 등), 탐X기 마우스 우클릭에 메뉴 없다는것 정도 입니다.
트레이 아이콘 제공도 안하던가…
기본적으로 utf-8 이 아니기 때문에 옵션은 조금 손봐줄 필요가 있습니다.
가장 좋게 생각하는 기능이 우하단의 현재 캐릭터셋 표시를 더블클릭하면,
바로 어떤 캐릭터셋으로든 다시 불러올 수 있다는 것입니다.
다른 이름으로 저장시에 어떤 캐릭터셋으로도 변환할 수 있고요.
                      
   낭망백수   07-12-17 13:22  
오호~ 오호~ 연발이군요. 감사합니다. 스트랩도 하구요. ^^;  
 
오호~ 오호~ 연발이군요. 감사합니다. 스트랩도 하구요. ^^;
  
   하늘처럼™   07-12-17 13:09  
이제 스쿨이 utf-8로 가는 일만 남은거죠?  
 
이제 스쿨이 utf-8로 가는 일만 남은거죠?
        
   낭망백수   07-12-17 13:21  
ㅎㅎㅎㅎ.  
 
ㅎㅎㅎㅎ.
        
   전진하는아르고   07-12-17 14:28  
스쿨은 euc-kr 였군요…  
 
_PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG__PS||MG_

쿼리문에 강제로 정렬(order by) 지정하는 방법

 글쓴이   뭉충닷컴  날 짜 07-10-20 19:03  조 회 266
 
 
사용할일 거의 없지만 가끔 필요할때가 있더군요 -_-;
(항상 현업의 요청은 뒷통수를 때리지요)



select * from test 이렇게 실행하면 결과값이
——————-
A
B
C
——————-


이렇게 나온다고 할때 이 정렬을


——————-
A
C
B
——————-


이렇게 바꾸고 싶다면 다음과 같이 한다. (A,B,C 데이타가 있는 필드명은 fld라 하겠다)


select * from test order by
    case fld
        when \’A\’ then \’1\’
        when \’B\’ then \’3\’
        when \’C\’ then \’2\’
        else \’9\’
    end


이렇게 case 문을 이용해서 임의로 정렬할 수 있도록 문자순번을 맞춰주면 된다.  
 

부모창 -> 자식창 -> 외부사이트 -> 자식창 -> 부모창 값 전달하기

1시간 넘게 헤매다가 네이버 지식인에 올렸던 내용…. 해결은 한줄 추가로 끝났다.. 허무…
답은.. “부모창에도 document.domain =’zzz.co.kr’; 를 삽입한다” 이다.
부모창, 자식창 모두 document.domain =’zzz.co.kr’; 를 삽입하니 이상없이 값 전달 완료


부모창 A(zzz.co.kr),  자식창 B,  타 사이트 C 라고 하고

보통 A에서 B를 띄우고 처리한 값을 다시 A로 보낼때는

B에서 opener.document.fomname.value=1; 로 처리를 하는데

제 경우는 A -> B(cp_test.php) 창을 띄우고 전달된 변수를 처리후 B창 상태에서

location=’xxx.co.kr?bb=gogo’;로 타 사이트로 값을 넘깁니다.

그리고 타 사이트C에서는 처리값을 B(cp_result.php)창으로 값을 전달합니다.

여기서 문제가 생기는데.. B창에서 uncaught exception: HTMLDocument.formname 라고 나옵니다.

그래서 검색해본 결과 document.domain =’zzz.co.kr’; 로 값을 주면 된다고 해서

줘봐도 결과는 동일합니다.

제목처럼 “부모창 -> 자식창 -> 외부사이트 -> 자식창 -> 부모창“으로 값을 전달할 수 있는 방법이 없을까요?