그누보드 연동 완료

워드프레스 회원 DB 를 기반으로 그누보드와 연동 시켜, 게시판에서 로그인 시 글 작성이 가능하게 하였음.

  1. 서브 도메인과 쿠키공유
  2. 워드프레스가 설치된 서버에 아래 소스를 “wp-sso.php” 로 저장
    <?
    	include 'wp-load.php';
    	
    	$cookie_name = 'wordpress_logged_in_'.md5(get_site_option('siteurl'));
    	$cookie = $_COOKIE&#91;$cookie_name&#93;;
    
    	wp_set_current_user(wp_validate_auth_cookie($cookie, 'logged_in'));
    
    	if($user = wp_get_current_user())
    	{
    		echo '<id>'.$user->user_login.'</id>';
    		//echo '<nick>'.$user->user_nicename.'</nick>';
    		echo '<nick>'.$user->display_name.'</nick>';
    		echo '<email>'.$user->user_email.'</email>';
    		echo '<url>'.$user->user_url.'</url>';
    	}
    ?>
  3. 그누보드 세션값이 없고, 워드프레스 쿠키 값이 있을 경우 2번 모듈을 서버에서 처리하여 SSO(Single Sign On) 기능 구현
  4. 그누보드 세션값이 있고, 워드프레스 쿠키 값이 없을 경우 세션을 비우고 해당 페이지 갱싱
  5. 그누보드 페이지 로딩 이벤트 발생시 해당 페이지 리사이징

 

 

그누보드 백업 예행 연습

기존 사용중인 DB 를 euc-kr 에서 utf8 로 변환하기 위해, 백업을 정성스레(??) 받은 후

editplus 로 열었더니, 현재 인코딩에서 손실될 수 있는 문자가 포함되어 있다고 함,

일딴 무시하고 UTF8 로 바꾸고 Import …. 젠장 ㅠㅠ 깨진 글자들 때문에 안됨

급하게 검색~~~~ 결국 방법이 안보임..

(덤프 할 때 –default-character-set 까지 옵션 다 주고 해도 안되는 이런 경우는 ㅠㅠ)

어쩔수 없이 아래와 같은 소스를 발견, 입맛에 맞게 수정 (UTF8변환, 원하는 테이블 선택)

이전  확인 완료!!!!  – 이전하는건 역시나 귀찮코, 피곤해 ㅠㅠ

 

<?
$mysql_host = '********';
$mysql_db = '********';
$mysql_user = '********';
$mysql_pass = '********';

$fileName = 'db-backup';
$extention = "sql";

// 필요한 테이블만~
$select&#91;&#93; = 'g4_board';
$select&#91;&#93; = 'g4_board_file';
$select&#91;&#93; = 'g4_board_good';
$select&#91;&#93; = 'g4_board_new';
$select&#91;&#93; = 'g4_config';
$select&#91;&#93; = 'g4_group';
$select&#91;&#93; = 'g4_group_member';
$select&#91;&#93; = 'g4_write_cast';
$select&#91;&#93; = 'g4_write_delphibbs';
$select&#91;&#93; = 'g4_write_english';
$select&#91;&#93; = 'g4_write_girl';
$select&#91;&#93; = 'g4_write_gy';
$select&#91;&#93; = 'g4_write_humor';
$select&#91;&#93; = 'g4_write_module';
$select&#91;&#93; = 'g4_write_mypage';
$select&#91;&#93; = 'g4_write_notice';
$select&#91;&#93; = 'g4_write_poll';
$select&#91;&#93; = 'g4_write_qna';
$select&#91;&#93; = 'g4_write_skin';
$select&#91;&#93; = 'g4_write_talk';
$select&#91;&#93; = 'g4_write_temp';
$select&#91;&#93; = 'g4_write_temppds';
$select&#91;&#93; = 'g4_write_test';
$select&#91;&#93; = 'g4_write_tiptech';
$select&#91;&#93; = 'g4_write_varios';

$all = false; //완전한 Insert 문을 작성하려면 true
$drop = true; //drop table 구문을 포함하려면 true
 
mysql_connect( $mysql_host, $mysql_user, $mysql_pass ) || die("데이타 베이스 접속에 실패하였습니다.");
mysql_select_db( $mysql_db ) || die("DB 접속 실패");
 
function bak_getTableNames($db)
{
	$result&#91;0&#93; = mysql_list_tables($db);
	$result&#91;1&#93; = mysql_num_rows($result&#91;0&#93;);
	return $result;
}
 
function bak_getFields($table)
{
	global $all;
	$result = mysql_query("show fields from $table");
	$i = 0;
	while($keys = mysql_fetch_array($result)) 
	{
		if(!$i) $defaultOrder = $keys&#91;Field&#93;;
		if($keys&#91;Key&#93; == 'PRI') 
		{
			$orderby = $keys&#91;Field&#93;;
			break;
		}
		$i++;
	}
	if(!$orderby) $orderby = $defaultOrder;
	$result = mysql_query("select * from $table order by $orderby");
	$nums = mysql_num_fields($result);
	if($all == true) 
	{
		for($i=0;$i<$nums;$i++) 
		{
			$fields&#91;&#93; = mysql_field_name($result,$i);
		}
		$fields = "(".implode(",",$fields).") ";
	}
	while($rows = mysql_fetch_row($result)) 
	{
		for($i=0;$i<$nums;$i++) 
		{
			$temp = $rows&#91;$i&#93;;
			$temp = str_replace("'","''", $temp);
			$temp = str_replace("","\", $temp);
			$temp = str_replace("n",'n', $temp);
			$temp = str_replace("r",'r', $temp);
			
			$temp = iconv('CP949', 'UTF-8', $temp);
			$insertValues&#91;$i&#93; = $temp;
		}
		$return .= "INSERT INTO $table ".$fields."values ('".implode("','",$insertValues)."');n";
	}
	return $return;
}
 
$tables = bak_getTableNames($mysql_db);

if($tables&#91;1&#93; > 0) 
{
	$backText = "
# MysqlDump
# 호스트: ".$mysql_host."
# 처리한 시간: ".date('Y년 n월 j일 H시 i분')."
# 서버 버전: ".mysql_get_server_info()."
# 데이터베이스 : `".$mysql_db."`
# --------------------------------------------------------nnnnn";

	while($rows = mysql_fetch_row($tables[0])) 
	{
		$chk = false;
		for($i=0;$i<count($select);$i++)
		{
			if($rows&#91;0&#93;==$select&#91;$i&#93;)
			{
				$chk = true;
				break;
			}
		}
		
		if(!$chk)continue;

		$backText .= "
#
# 테이블 구조 `".$rows&#91;0&#93;."`
#nn";
		$skima = mysql_fetch_array(mysql_query("SHOW CREATE TABLE ".$mysql_db.".".$rows&#91;0&#93;));
		if($drop == true) $backText .= "DROP TABLE IF EXISTS ".$skima&#91;0&#93;.";nn";
		$backText .= "CREATE TABLE if not exists ".$skima&#91;0&#93;." ";
		$pos = strpos($skima&#91;1&#93;," (");
		$backText .= str_replace("`","",substr($skima&#91;1&#93;,($pos+1))).";";

		$insert = bak_getFields($rows&#91;0&#93;);
		$backText .= "
#
# 테이블 '".$rows&#91;0&#93;."' insert 문
#";
		if($insert) $backText .= "nnn".$insert;
		$backText .= "nnnnn";
	}

	header("Content-Type: application/octetstream");
	header("Content-Disposition: attachment; filename=".$fileName.".".$extention);
	header('Expires: 0');
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Pragma: public');
	echo $backText;
}
?>

워드프레스 설치 완료

워드프레스 설치하고 분석중 … 아직까지 적응이 안되고 있음 ㅠㅠ

메뉴 설치하는 것부터 헤매는 바람에 딜레이 엄청 되었음

  1. 서브 메뉴일때 페이지(?) 인 경우 Navigate 에서 포커스를 제대로 출력 못해줬음.
    임시로 수정하여, 정상적으로 작동함. 좀더 분석해봐야될듯
    (파일위치 : /themes/Polished/includes/scripts.php)

    //var active_subpage = jQuery('ul.sf-menu ul li.current-cat, ul.sf-menu ul li.current_page_item').parents('li.top-level').prevAll().length;
    var active_subpage = jQuery('ul.sf-menu ul li.current-cat, ul.sf-menu ul li.current-menu-item').parents('li.top-level').prevAll().length;
    
  2. 설치한 플러그인
    – Automatic Subdomains
    – jQuery Vertical Accordion Menu
    – root Cookie
    – Permalink Editor (설치만 하고, 비활성 중)