2009. 4. 24. 18:01

Mysql,제로보드4,euckr이 안될때

어느날 리눅스를 설치하고 아파치를 설치하고 php설치후에 mysql를 설치했다..

그리고 그 서버에 대해 잊고 있었건만... 어느날 웹서버를 사용해야 하는 상황이 발생했다..

기존의 홈페이지들은 모두 euckr로 작성되었으며, 앞으로도 euckr로 작성될듯 하다..

헌데 mysql은 모두 utf8로 세팅을 해놨으니..쩝...

my.cnf를 통해서 euckr를 사용하려 하였으나 계속되는 데몬의 에러...

collate문을 이용해서 euckr용 디비를 생성했으나 역시.. 제대로 제로보드속에서 한글을 구현할수 없었다..

결국엔 mysql의 재컴파일을 통해서.. euckr용 mysql을 세팅했다..

덕분에 mysql의 업그레이드도 할수 있었다..

>mysqladmin -uroot -ppassword shutdown

기존 디비의 데몬을 정지한다.

rm -rf /usr/local/mysql

디비를 지우고...

새로운 버젼을 받아서 euckr용으로 컴파일한다.

컴파일옵션...은

./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr --with-mysql-user=mysql --sysconfdir=/etc --enable-thread-safe-client

컴파일후 보통의 mysql설치하는대로 설치를 하였다..

mysql> show variables like '%char%';
+--------------------------+-----------------------------------------+
| Variable_name            | Value                                   |
+--------------------------+-----------------------------------------+
| character_set_client     | euckr                                   |
| character_set_connection | euckr                                   |
| character_set_database   | euckr                                   |
| character_set_filesystem | binary                                  |
| character_set_results    | euckr                                   |
| character_set_server     | euckr                                   |
| character_set_system     | utf8                                    |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.00 sec)

그리고 제로보드의 생성...

하지만 난간에 붙잡히기 시작했다..

우선 admin계정 생성후 , admin으로 로그인이 안되는 문제와...

euckr로 mysql이 세팅이 됐음에도 불구하고..

한글입력 디비에는 알수없는 문자(물음표)로 기록된다는 것이었다.

아 왕짜증...ㅋ

걍 lampp로 돌릴걸..ㅋ

이 문제는 서버의 sql데몬이 문제라기 보다..

php와 mysql버젼이

제로보드4가 개발될 당시보다 훨 진화했다는것이 문제였다..

전자는 php의 세션선언이 바뀌었고

후자는 mysql에 접속할시에 우리는 euckr로 접속할거라는 쿼리선언을 하여야지만 제대로 된 게시판을 만들수 있었다...

login_check.php에서

  1. session_register("zb_logged_no");
  2. session_register("zb_logged_time");
  3. session_register("zb_logged_ip");
  4. session_register("zb_last_connect_check");

이 부분을

  1. $_SESSION["zb_logged_no"] = $zb_logged_no;
  2. $_SESSION["zb_logged_time"] = $zb_logged_time;
  3. $_SESSION["zb_logged_ip"] = $zb_logged_ip;
  4. $_SESSION["zb_last_connect_check"]= $zb_last_connect_check;

이런식으로 바꾸어줍니다..

그리고 lib.php를 열어서  member_info() 함수를 보면

$HTTP_SESSION_VARS
$HTTP_SESSION_VARS["zb_logged_no"]

이 두 선언을...

$_SESSION
$_SESSION["zb_logged_no"] 요걸루 대치시킨다.

그리고 php.ini를 열어서 register_global=on 으로 바꾸어준다.

이 부분을 손보고 나면..

php버젼업에 따른 로그인이 안되는 문제는 해결된다..

이번엔 euckr문자가 ????? (물음표)로 표시되는것을 수정해야...

my.cnf에서 [mysqld] [client] [mysqldump] 부분에

default-character-set=euckr

를 추가시키고..

그리고 나서 /usr/local/mysql/bin/mysqld_safe --user=mysql &

데몬을 다시 잘가동시켜주시고..

제로보드의 lib.php의 dbconn 함수를 찾는다.

@mysql_select_db($f[4], $connect) or Error("DB Select 에러가 발생했습니다","");
@mysql_query("set names euckr");

  return $connect;

빨간 부분을 리턴문이 실행시키기전으로 삽입시킨다...

그리고 나서 이제 제로보드를 사용하면.. 입력안되던 한글이 자연스럽게 입출력된다..ㅋ

??? 물음표로 표시되던 한글이 3번 게시물부터 정상입출력됨을 알수있다..

컴터를 양넘들이 만들어서 계속 혼돈을 가져오는 표준한글코드의 문제점이라 할수있당..