워드프레스, 그누보드 연동

현재 길호넷에서 워드프레스와 그누보드를 연동한 방식입니다.

사이트를 좀 더 안정화를 시킨 후 소스를 공개하려고 하였는데, 그누보드 사용자분의 요청(?)으로 급조하여 만든걸 올립니다. (http://sir.co.kr/bbs/board.php?bo_table=cm_free&wr_id=741180)

추후, 그누보드의 head.php, tail.php 에서 워드프레스에서 생성된 페이지를 직접 불러들이고, 캐쉬 처리 및 컨텐츠 영역을 상하로 나눈 후 출력하는것을 생각하고 있습니다.

– 워드프레스 회원 DB 를 기반으로 그누보드와 연동되어, 게시판 글 작성시 워드프레스의 로그인에 따라 액션을 취합니다.
– 그누보드를 gnu.kilho.net 로 사용하고 있습니다. 따라서 워드프레스에서 서브도메인과 쿠키를 공유할 수 있게 하여야 합니다.
(길호넷에서는 “root Cookie” 라는 플러그인을 사용하였습니다)
– 워드프레스와 그누보드가 각각의 서버로 운영되고 있습니다. 소스 내용 중 자신의 워드프레스가 설치된 서버IP, 워드프레스가 설치된 도메인 정보를 각각 수정하세요.
– 워드프레스가 설치된 서버에 아래 소스를 “wp-sso.php” 로 저장합니다.
[PHP]
‘.$user->user_login.’‘;
echo ‘‘.$user->display_name.’‘;
echo ‘‘.$user->user_email.’‘;
echo ‘‘.$user->user_url.’‘;
}
?>
[/PHP]
– 그누보드가 설치된 서버의 “/extend/” 디렉토리에 아래 소스를 “wp-sso.php”로 저장합니다.
[PHP]
window.location.reload(); “;
exit;
}
}else{
if($wp_cookie_value)
{
// 메인 서버에서 정보 취득
$fp = fsockopen($wp_server_addr,80,$errno,$errstr,3);

if($fp)
{
fputs($fp, “GET {$wp_server_path}wp-sso.php HTTP/1.1\r\n”);
fputs($fp, “Accept: */*\r\n”);
fputs($fp, “Accept-Language: ko\r\n”);
fputs($fp, “User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1)\r\n”);
fputs($fp, “Host: $wp_server_domain\r\n”);
fputs($fp, “Connection: Close\r\n”);
fputs($fp, “Cookie: $wp_cookie_name=$wp_cookie_value\r\n”);
fputs($fp, “\r\n”);

$data = ”;
while(!feof($fp))
{
$data .= fgets($fp,1024);
}

fclose($fp);

if($data)
{
foreach(array(‘id’, ‘nick’, ’email’, ‘url’, ‘password’) as $value)
{
preg_match(‘@<'.$value.'>(.*?)@’,$data,$matches);
$wp_user[$value] = $matches[1];
}
$wp_user[pass] = substr(str_shuffle(‘abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890′), 0, 12);

$sql = ” select mb_id from $g4[member_table] where mb_id=’$wp_user[id]’ “;
$row = sql_fetch($sql);
if($row[mb_id]!=$wp_user[id])
{
$sql = ” insert into $g4[member_table]
set mb_id = ‘$wp_user[id]’,
mb_password = password(‘$wp_user[pass]’),
mb_name = ‘$wp_user[nick]’,
mb_nick = ‘$wp_user[nick]’,
mb_email = ‘$wp_user[email]’,
mb_homepage = ‘$wp_user[url]’,
mb_datetime = ‘$g4[time_ymdhis]’,
mb_ip = ‘$_SERVER[REMOTE_ADDR]’,
mb_level = ‘$config[cf_register_level]’ “;
sql_query($sql);
}else{
$sql = ” update $g4[member_table]
set mb_nick = ‘$wp_user[nick]’,
mb_email = ‘$wp_user[email]’,
mb_homepage = ‘$wp_user[url]’
where mb_id = ‘$wp_user[id]’ “;
sql_query($sql);
}
unset($row);

$mb = get_member($wp_user[id]);

// 회원아이디 세션 생성
set_session(‘ss_mb_id’, $mb[mb_id]);
// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 – 110106
set_session(‘ss_mb_key’, md5($mb[mb_datetime] . $_SERVER[‘REMOTE_ADDR’] . $_SERVER[‘HTTP_USER_AGENT’]));

// 페이지를 재실행
echo ““;
exit;
}
}else{
echo ‘Connection failed’;
exit;
}

}
}
?>
[/PHP]

arrow