접속자 보기

현재 접속중인 사용자를 편법이나마 알려주는 코드입니다 ^^

개인홈페이지나 사용자가 무지 많은곳만 아니라면 간단하게 사용하세요 ^^

by 오길호 (prince@kilho.net, http://k2lab.com)

——————————————————————
* 설치방법

1. config.php 값을 알아서 맞춥니다(각 디비에 맞춰서 ^^)
2. make_table.php 을 한번실행시켜서 테이블 생성하고 초기값을 넣어줍니다
3. 필요한 부분에 메인소스를 넣습니다.
(메인소스는 캡슐화 시켜서 한군데 넣어놓고 필요시 뿌리면 될껍니다 ^^)

* 동작원리

1. 페이지를 옮길때마다 사용자의 접속시간을 체크합니다.
2. 불특정 사용자가 일정시간이후 접속시 쓰레기값(?)들을 지웁니다.
3. DB에 저장된값들 출력~

* 회원제라면 NICKNAME 에 ID값이나 닉네임값을 넣어주고 약간 변경하면 회원들의
접속상태만 알아낼수 있을껍니다 ^^

—— config.php 소스 ——————————————–
$khost = ‘localhost’; //host
$kuser = ‘xxxxx’; //user
$kpassword=’xxxxx’; //DB password
$kdataname=’xxxxx’; //DB name

// DB connect
$db=mysql_connect(“$khost”,”$kuser”,”$kpassword”);
mysql_select_db(“$kdataname”,$db);
?>

—— make_table.php 소스 ——————————————-
// 실시간(?) 접속자 보여주기 by 오길호(prince@kilho.net/k2lab.com)
//
// Subject : 초기 테이블 설정

include “config.php”;
mysql_query(“create table KILHO_NOWUSER (ip char(16) not null primary key, nickname varchar(40), regdate datetime,index (regdate))”,$db) OR die (mysql_error());
mysql_query(“insert into KILHO_NOWUSER values (‘CHECKID’,’CHECKID’,now())”,$db) OR die (mysql_error());
mysql_close($db);
?>

—— 메인부분 소스 —————————————————
// 실시간(?) 접속자 보여주기 by 오길호(prince@kilho.net/k2lab.com)
//
// Subject : 메인 루틴
// Comment : 보여줄 페이지마다 아래를 추가한다. include등을 이용하면 좋을듯
// 이 소스를 캡슐화 해서 사용하면 더 낫겟졈? ㅋㄷ

// 현재 접속중인 아이디(닉네임)를 $NICKNAME에다가 넣어주면
// 접속중인 회원들만 뽑아내는것을 처리할수 있을것이다. (확장성 고려??)

include “config.php”;

// 변수 초기화
$limittime=60; // 1분마다 검사함
$REMOTE_ADDR = $HTTP_SERVER_VARS[‘REMOTE_ADDR’];

// 사용자 IP가 있는지 체크
// 있으면 접속시간만 업데이트 시켜준다, 없으면 IP와 접속시간을 추가시킨다
$chkip=mysql_fetch_row(mysql_query(“select count(ip) from KILHO_NOWUSER where ip=’$REMOTE_ADDR'”));

if($chkip[0])
mysql_query(“update KILHO_NOWUSER set nickname=’$NICKNAME’,regdate=now() where ip=’$REMOTE_ADDR'”);
else
mysql_query(“insert into KILHO_NOWUSER (ip,nickname,regdate) values (‘$REMOTE_ADDR’,’$NICKNAME’,now()-‘$limittime’)”);

// 체크한 시간이 3분이 넘는지 알아본다
// 3분이 넘으면 체크값을 초기화 시키고, 3분이 넘은 데이터를 지운다.
// 180 이라고 적힌부분이 3분을 의미함 ^^
$row=mysql_fetch_row(mysql_query(“select regdate from KILHO_NOWUSER where ip=’CHECKID’ and regdate if($row[0])
{
mysql_query(“update KILHO_NOWUSER set regdate=now() where ip=’CHECKID'”);
mysql_query(“delete from KILHO_NOWUSER where regdate }

// 출력시켜준다. ^^
$result=mysql_query(“select ip,nickname from KILHO_NOWUSER where ip<>‘CHECKID'”);
while($row=mysql_fetch_row($result))
echo $row[1].'[‘.$row[0].’]
‘;

mysql_close();
?>

팝업창 상위에 존재하게 하기

이걸 해결 하신분이 있으신지 모르겠습니다.
그러나, 전 여지까지 해결하지 못했었습니다.
해결 방법이래봐야 자기 자신에게 포커스를 계속 주던가,
아님 포커스를 잃었을 때 다시 포커스를 주는 방식, 아님 모달리시인가하는 방법등
여러가지가 있지만 이방법 윈엠프에서 always on top의 기능을 구현하진 못했습니다.

————————————————————–< OBJECT classid="clsid:D8F001C6-43B1-4CFD-9DAF-C8BEAE0E2B6D" codebase="OnTop.ocx" ID="ONTOP" name="ONTOP" width="0" height="0">< /OBJECT>
< script>
ONTOP.onTop(1)
< /script>
————————————————————-
여기에서 ONTOP.onTop(0) 을 주게 되면 항상위 기능이 해제됩니다.

예를 들어 이렇게 해준다면
< a href="javascript:;" onclick="OnTop()">항상위(설정/해제)
< script>
var t=1;
function OnTop(m) {
if(t==1) t=0;
else t=1;
ONTOP.onTop(t);
}
< /script>
설정과 해제를 동시에 할수도 있을 것입니다.
————————————————————–
예제는 http://lamusica.co.kr 로 가신다음 오른쪽 중간쯤에 Listen Music에 들어가신다음
아무음악이나 틀어 보심 됩니다.
음악을 틀었을때 뜨는 창에 적용 시켜 놨거든요…
여기에서 들으면 Ra입니다. 리얼플레이어가 깔려 있어야하죠…
깔기 싫으신분은 오른쪽 검색에서 검색영역을 song으로 하신다음 mp3라고 검색해보세요
거기서 조금 나오는데 이건 제가 들을라구 올려놓은 파일입니다.
————————————————————–
Ocx 파일
http://lamusica.co.kr/music/OnTop.ocx
위에꺼 다운 받으시고 적용시키고자하는 창에다 위에꺼 적어넣으세요…

세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인 하는 소스

DB클래스는 넣지 않습니다. 참고정도 하시라고 공개합니다. 여기 게시판에서 팁도 좀 얻었습니다. 잘 보시고 응용해 보세요!

세션구울 때 DB를 사용합니다. 그리고 중복로그인을 막고, 2차도메인을 사용하는 사이트에서 통합로그인이 가능토록한 소스입니다.

늘 행복하세요!

====== 아래부터 소스입니다. ==============

//!! eZSession DB (세션 DB핸들링 및 통합로그인)
/*

CREATE TABLE “ezsession_session” (
“sesskey” varchar(33) NOT NULL,
“expiry” int4 NOT NULL,
“value” text NOT NULL,
“uid” int4 NOT NULL,
“security” varchar(1) NOT NULL,
“remoteip” varchar(20),
CONSTRAINT “ezsession_session_pkey” PRIMARY KEY (“sesskey”)
);

// start session handling
include_once( “classes/ezsession.php” );

session_set_save_handler (“sess_open”, “sess_close”, “sess_read”, “sess_write”, “sess_destroy”, “sess_gc”);
session_set_cookie_params( 0, “/”, “.ohmytravel.com” );
session_start();
*/

include_once( “classes/ezdb.php” );

$ini =& INIFile::globalINI();
$SesstionTimeOut = 30 * 60;
$maxlifetime = $SesstionTimeOut;

function sess_open( $save_path, $session_name )
{
global $sess_save_path, $sess_session_name;

// $sess_save_path = $save_path;
// $sess_session_name = $session_name;

return true;
}

function sess_close()
{
return true;
}

function sess_read( $key )
{
global $sess_save_path, $sess_session_name;

$db =& eZDB::globalDatabase();

$value_array = array();

$db->array_query( $value_array, “SELECT value FROM ezsession_session WHERE sesskey=’$key’ AND expiry > ” . time() );

if( count( $value_array ) == 1 )
{
// 세션시간이 현재시간보다 크다면 정보를 가져온다.
return $value_array[0][$db->fieldName(“value”)];
}
else
{
$db->query( “DELETE FROM ezsession_session WHERE sesskey=’$key'” );
return false;
}
}

function sess_write( $key, $sess_data )
{
global $sess_save_path, $sess_session_name, $maxlifetime;

$db =& eZDB::globalDatabase();
$ret = false;

$session_array = array();
$check_array = array();

$expiry = time() + $maxlifetime;
$value = addslashes( $sess_data );
$remoteip = $_SERVER[“REMOTE_ADDR”];

// 세션정보가 존재하는지 체크
$db->array_query( $session_array, “SELECT * FROM ezsession_session WHERE sesskey=’$key’ AND value IS NOT NULL” );

if ( count( $session_array ) == 1 ) // 세션업데이트 – DB의 시간이 현재시간보다 크면 계속 시간을 업데이트 시켜 세션을 유지.
{
$res = $db->query( “UPDATE ezsession_session SET expiry=’$expiry’ WHERE sesskey=’$key’ AND expiry > ” . time() );

if( $res == true )
$ret = true;
}
else if ( count( $session_array ) == 0 ) // 세션정보가 없는 경우. DB에 세션을 추가한다.
{
if ( $sess_data )
{
$uid = $GLOBALS[‘ezuser_session_id’];

// 이중 로그인 차단! 흐흐~ 주기넹! 완벽한 중복로그인 차단이얌! ㅋㅋㅋ~
$db->array_query( $check_array, “SELECT value FROM ezsession_session WHERE uid=’$uid’ AND remoteip!=’$remoteip'” );

// 중복로그인을 검사하기 위한 필드. O 정상, X 중복로그인.
$security = “O”;
if ( count( $check_array ) == 1 )
{
$security = “X”;
}

// lock the table
$db->begin();
$db->lock( “ezsession_session” );

// 세션추가 – 로그인했을 경우 $sess_data 정보가 한번 넘어온다. 그 때만 추가한다.
$res = $db->query( “INSERT INTO ezsession_session ( sesskey, expiry, value, uid, security, remoteip ) VALUES ( ‘$key’, ‘$expiry’, ‘$value’, ‘$uid’, ‘$security’, ‘$remoteip’ )” );

if ( $res == true )
$ret = true;
}
}

$db->unlock();

if ( $ret == false )
$db->rollback( );
else
$db->commit();

return $ret;
}

function sess_destroy( $key )
{
global $sess_save_path, $sess_session_name;

$db =& eZDB::globalDatabase();

$db->query( “DELETE FROM ezsession_session WHERE sesskey=’$key'” );

return true;
}

/*********************************************
* WARNING – You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function sess_gc( $maxlifetime )
{
$db =& eZDB::globalDatabase();

$db->query( “DELETE FROM ezsession_session WHERE expiry < " . time() ); return true;
}

// 세션 핸들링 (도메인 입력시 1차도메인 앞에 .(점)을 찍어야 한다.)
session_set_save_handler (“sess_open”, “sess_close”, “sess_read”, “sess_write”, “sess_destroy”, “sess_gc”);
session_set_cookie_params( 0, “/”, “.domain.com” );
session_start();

양음력 달력변환함수(띠, 요일, 간지 포함)

/***********************************************************************
*
* 작은달:1, 큰달:2, 평달(소)+윤달(소):3, 평달(소)+윤달(대):4,
* 평달(대)+윤달(소):5, 평달(대)+윤달(대):6
*
* 호출법: soltolun(2002,01,11) 또는 luntosol(2001,02,15,true)
************************************************************************/
$startyear = 1841;
$endyear = 2043;

$hganarray = array(“甲”,”乙”,”丙”,”丁”,”戊”,”己”,”庚”,”辛”,”壬”,”癸”);
$hjiarray = array(“子”,”丑”,”寅”,”卯”,”辰”,”巳”,”午”,”未”,”申”,”酉”,”戌”,”亥”);
$kganarray = array(“갑”,”을”,”병”,”정”,”무”,”기”,”경”,”신”,”임”,”계”);
$kjiarray = array(“자”,”축”,”인”,”묘”,”진”,”사”,”오”,”미”,”신”,”유”,”술”,”해”);
$kddiarray = array(“쥐”,”소”,”호랑이”,”토끼”,”용”,”뱀”,”말”,”양”,”원숭이”,”닭”,”개”,”돼지”);
$kweekarray = array(“일”,”월”,”화”,”수”,”목”,”금”,”일”);
$moflastday = array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$yeararray = array(12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
$dbarray = array (
1,2,4,1,1,2,1,2,1,2,2,1, 2,2,1,2,1,1,2,1,2,1,2,1, 2,2,2,1,2,1,4,1,2,1,2,1, 2,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,2,1,2,1,2,1,2,1,
2,1,2,1,5,2,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,3,2,1,2,1,2,1,2,2, 2,1,2,1,1,2,1,1,2,2,1,2,
2,2,1,2,1,1,2,1,2,1,5,2, 2,1,2,2,1,1,2,1,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,5,2,1,2,1,2, 1,1,2,1,2,2,1,2,2,1,2,1,
2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,5,2,1,2,1,2,2,2, 1,2,1,1,2,1,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,1,2,2, 2,1,6,1,1,2,1,1,2,1,2,2,
1,2,2,1,2,1,2,1,2,1,1,2, 2,1,2,1,2,2,1,2,2,3,1,2, 1,2,2,1,2,1,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,4,1,2,2,1,2,2,1,
2,1,1,2,1,1,2,2,1,2,2,2, 1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,3,2,1,1,2,1,2,2,1, 2,2,2,1,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,5,2,1,
2,2,1,2,2,1,2,1,2,1,1,2, 1,2,1,2,2,1,2,1,2,2,1,2, 1,1,2,1,2,4,2,1,2,2,1,2, 1,1,2,1,2,1,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1,
2,2,1,1,5,1,2,1,2,2,1,2, 2,2,1,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1, 2,2,4,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,2,1,2,1,1,2,
1,2,1,2,1,2,5,2,2,1,2,1, 1,2,1,2,1,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2, 2,1,1,2,3,2,1,2,2,1,2,2, 2,1,1,2,1,1,2,1,2,1,2,2,
2,1,2,1,2,1,1,2,1,2,1,2, 2,2,1,5,2,1,1,2,1,2,1,2, 2,1,2,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,1,2,1,2,1,2, 1,5,2,1,2,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,2,1,2,2, 1,1,2,1,1,5,2,2,1,2,2,2, 1,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,5,1,2,1,2,1,2,1,
2,2,2,1,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,2,1,2,1,2,1, 2,1,5,2,2,1,2,1,2,1,2,1, 2,1,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,5,2,2,1,2,
1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,3,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,2,1,2,
1,2,2,4,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,2,1,2,1,2,2,1,2, 1,5,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1,
2,1,2,1,1,5,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,1,2, 2,2,1,2,5,1,2,1,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,2,1,2,1,2,1, 2,3,2,1,2,2,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,5,2,2,1,2,2, 1,2,1,1,2,1,1,2,2,1,2,2,
2,1,2,1,1,2,1,1,2,1,2,2, 2,1,2,2,3,2,1,1,2,1,2,2, 1,2,2,1,2,1,2,1,2,1,1,2, 2,1,2,1,2,2,1,2,1,2,1,1, 2,1,2,5,2,1,2,2,1,2,1,2,
1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,1,2,1,2,2,1,2,2, 1,5,1,2,1,1,2,2,1,2,2,2, 1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,1,1,5,1,2,1,2,2,1,
2,2,2,1,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,2,1,2, 1,2,2,1,6,1,2,1,2,1,1,2, 1,2,1,2,2,1,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1,
2,1,4,1,2,1,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1, 2,2,1,1,2,1,4,1,2,2,1,2, 2,2,1,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1,
2,2,1,2,2,4,1,1,2,1,2,1, 2,1,2,2,1,2,2,1,2,1,1,2, 1,2,1,2,1,2,2,1,2,2,1,2, 1,1,2,4,1,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2,
2,1,1,2,1,1,2,1,2,2,1,2, 2,5,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,3,2,1,2,1,2, 2,1,2,2,1,2,1,1,2,1,2,1,
2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,4,2,1,2,1,2,1,2, 1,2,1,1,2,2,1,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,1,2,2, 2,1,4,1,1,2,1,2,1,2,2,2,
1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,5,2,1,2,2, 1,2,2,1,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,5,2,1,2,1,2,1,
2,1,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,2,1,2,2,1, 2,1,2,3,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,1,2,2,1,
2,2,5,2,1,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,2,1,2, 1,2,2,1,2,1,5,2,1,2,1,2, 1,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,2,1,2,1,2,2,1,2,
1,2,1,1,5,2,1,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,1,2,2,2,1, 2,2,1,5,1,2,1,1,2,2,1,2, 2,2,1,2,1,1,2,1,1,2,1,2,
2,2,1,2,1,2,1,5,2,1,1,2, 2,1,2,2,1,2,1,2,1,2,1,1, 2,2,1,2,1,2,2,1,2,1,2,1, 2,1,1,2,1,6,1,2,2,1,2,1, 2,1,1,2,1,2,1,2,2,1,2,2,
1,2,1,1,2,1,1,2,2,1,2,2, 2,1,2,3,2,1,1,2,2,1,2,2, 2,1,2,1,1,2,1,1,2,1,2,2, 2,1,2,2,1,1,2,1,1,5,2,2, 1,2,2,1,2,1,2,1,1,2,1,2,
1,2,2,1,2,2,1,2,1,2,1,1, 2,1,2,2,1,5,2,2,1,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,1,2,1,2,2,1,2,2, 1,2,1,1,5,1,2,1,2,2,2,2,
1,2,1,1,2,1,1,2,1,2,2,2, 1,2,2,1,1,2,1,1,2,1,2,2, 1,2,5,2,1,2,1,1,2,1,2,1, 2,2,2,1,2,1,2,1,1,2,1,2, 1,2,2,1,2,2,1,5,2,1,1,2,
1,2,1,2,2,1,2,1,2,2,1,2, 1,1,2,1,2,1,2,2,1,2,2,1, 2,1,1,2,3,2,2,1,2,2,2,1, 2,1,1,2,1,1,2,1,2,2,2,1, 2,2,1,1,2,1,1,2,1,2,2,1,
2,2,2,3,2,1,1,2,1,2,1,2, 2,2,1,2,1,2,1,1,2,1,2,1, 2,2,1,2,2,1,2,1,1,2,1,2, 1,5,2,2,1,2,1,2,2,1,1,2, 1,2,1,2,1,2,2,1,2,2,1,2,
1,1,2,1,2,1,5,2,2,1,2,2, 1,1,2,1,1,2,1,2,2,2,1,2, 2,1,1,2,1,1,2,1,2,2,1,2, 2,2,1,1,5,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2,
2,1,2,2,1,2,1,1,2,1,2,1, 2,1,6,2,1,2,1,1,2,1,2,1, 2,1,2,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,5,2,1,2, 1,2,1,1,2,1,2,2,2,1,2,2,
1,1,2,1,1,2,1,2,2,1,2,2, 2,1,1,2,3,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,2,1,2,2, 2,1,2,1,2,1,1,2,1,2,1,2, 2,1,2,5,2,1,1,2,1,2,1,2,
1,2,2,1,2,1,2,1,2,1,2,1, 2,1,2,1,2,2,1,2,1,2,1,2, 1,5,2,1,2,1,2,2,1,2,1,2, 1,2,1,1,2,1,2,2,1,2,2,1, 2,1,2,1,1,5,2,1,2,2,2,1,
2,1,2,1,1,2,1,2,1,2,2,2, 1,2,1,2,1,1,2,1,1,2,2,2, 1,2,2,1,5,1,2,1,1,2,2,1, 2,2,1,2,2,1,1,2,1,1,2,2, 1,2,1,2,2,1,2,1,2,1,2,1,
2,1,5,2,1,2,2,1,2,1,2,1, 2,1,1,2,1,2,2,1,2,2,1,2, 1,2,1,1,2,1,5,2,2,2,1,2, 1,2,1,1,2,1,2,1,2,2,2,1, 2,1,2,1,1,2,1,1,2,2,1,2,
2,2,1,2,1,4,1,1,2,1,2,2, 2,2,1,2,1,1,2,1,1,2,1,2, 2,2,1,2,1,2,1,2,1,1,2,1, 2,2,1,2,5,2,1,2,1,2,1,1, 2,1,2,2,1,2,2,1,2,1,2,1,
2,1,1,2,1,2,2,1,2,2,1,2, 1,5,1,2,1,2,1,2,2,2,1,2, 1,2,1,1,2,1,1,2,2,1,2,2);

function febdays($smonth) {
if(($smonth%100 != 0 && $smonth%4 ==0) || $smonth%400 ==0) $moflastday[1] = 29;
else $moflastday[1] = 28;
return $moflastday[1];
}

function alltoday($syear) {
global $moflastday;
global $startyear;
$totalday -= 22;
for($step=$startyear;$step<=$syear-1;$step++) {
$moflastday[1] = febdays($step);
$totalmonthday = array_sum($moflastday);
$totalday += $totalmonthday;
}
return $totalday;
}

function numformat($integer) {
return sprintf(“%02d”, $integer);
}

function soltolun($syear, $smonth, $sday) {

global $startyear,$endyear,$hganarray,$hjiarray,$kganarray,$kjiarray;
global $kddiarray,$kweekarray,$moflastday,$yeararray,$dbarray;

if($syear < 1842 || $syear > 2040) return false;

$totaldate = $syear.numformat($smonth).numformat($sday);
if($totaldate > 20440130 || $totaldate < 18410123) return false;
$totalday = alltoday($syear);
$moflastday[1] = febdays($syear);

for($tempmonth=0;$tempmonth<$smonth-1;$tempmonth++) $totalday += $moflastday[$tempmonth];
$totalday += $sday;

$dbindex = 0;
$temptotalday = $totalday;

while(1) {
if($dbarray[$dbindex] == 1) {
$moflastdaylun = 29;
$leap = false;
}
else if($dbarray[$dbindex] == 2) {
$moflastdaylun = 30;
$leap = false;
}
else if($dbarray[$dbindex] == 3) {
$moflastdaylun = 29;
$moflastdayleap = 29;
$leap = true;
if($temptotalday > 29) $temptotalday -= 29;
}
else if($dbarray[$dbindex] == 4) {
$moflastdaylun = 29;
$moflastdayleap = 30;
$leap = true;
if($temptotalday > 30) $temptotalday -= 30;
}
else if($dbarray[$dbindex] == 5) {
$moflastdaylun = 30;
$moflastdayleap = 29;
$leap = true;
if($temptotalday > 29) $temptotalday -= 29;
}
else if($dbarray[$dbindex] == 6) {
$moflastdaylun = 30;
$moflastdayleap = 30;
$leap = true;
if($temptotalday > 30) $temptotalday -= 30;
}
$temptotalday -= $moflastdaylun;
$dbindex++;
$lyear = floor($dbindex/12);
if($temptotalday <= 0) break;
}
if($leap) $temptotalday += $moflastdayleap;
else $temptotalday +=$moflastdaylun;

$lyear += $startyear;
$lmonth = $yeararray[$dbindex%12];
$lday = $temptotalday;
$a = ($lyear + 6) % 10;
$b = ($lyear + 8) % 12;
$c = ($totalday + 2) % 10;
$d = ($totalday + 10) % 12;
$e = ($totalday + 5) % 7;

/* output */
$myarray[“year”] = $lyear;
$myarray[“month”] = $lmonth;
$myarray[“day”] = $lday;
$myarray[“yhgan”] = $hganarray[$a];
$myarray[“ykgan”] = $kganarray[$a];
$myarray[“yhji”] = $hjiarray[$b];
$myarray[“ykji”] = $kjiarray[$b];
$myarray[“kddi”] = $kddiarray[$b];
$myarray[“dhgan”] = $hganarray[$c];
$myarray[“dkgan”] = $kganarray[$c];
$myarray[“dhji”] = $hjiarray[$d];
$myarray[“dkji”] = $kjiarray[$d];
$myarray[“week”] = $kweekarray[$e];
$myarray[“leap”] = $leap;
return $myarray;
}

function luntosol($lyear, $lmonth, $lday, $leap=”) {

global $startyear,$endyear,$hganarray,$hjiarray,$kganarray,$kjiarray;
global $kddiarray,$kweekarray,$moflastday,$yeararray,$dbarray;

if($lyear < 1842 || $lyear > 2040) return false;

if($lyear > $endyear || $lyear < $startyear) return false; $temptotalday = 0;
$dbindex = ($lyear – $startyear) * 12 + ($lmonth – 1) – 1;
for($step=$dbindex;$step>=0;$step–) {
if($dbarray[$step] == 1) $temptotalday += 29;
else if($dbarray[$step] == 2) $temptotalday += 30;
else if($dbarray[$step] == 3) $temptotalday += 58;
else if($dbarray[$step] == 4) $temptotalday += 59;
else if($dbarray[$step] == 5) $temptotalday += 59;
else if($dbarray[$step] == 6) $temptotalday += 60;
}

$dbindex = ($lyear – $startyear) * 12 + ($lmonth) -1;
if($leap) {
if($dbarray[$dbindex] == 3 || $dbarray[$dbindex] == 4) $temptotalday += 29;
else if($dbarray[$dbindex] == 5 || $dbarray[$dbindex] == 6) $temptotalday += 30;
}

$temptotalday += $lday + 22;
$totalday = $temptotalday;
$tempyear = $startyear;

while(1) {
$moflastday[1] = febdays($tempyear);
for($tempmonth=0;$tempmonth<12;$tempmonth++) {
$temptotalday -= $moflastday[$tempmonth];
if($temptotalday <= 0) {
$temptotalday += $moflastday[$tempmonth];
$tempday = $temptotalday;
break 2;
}
}
$tempyear++;
}

$syear = $tempyear;
$smonth = $tempmonth + 1;
$sday = $tempday;
$a = ($lyear+6) % 10;
$b = ($lyear+8) % 12;
$c = $totalday % 10;
$d = $totalday % 12;
$e = ($totalday+4) % 7;

/* output */
$myarray[“year”] = $syear;
$myarray[“month”] = $smonth;
$myarray[“day”] = $sday;
$myarray[“yhgan”] = $hganarray[$a];
$myarray[“ykgan”] = $kganarray[$a];
$myarray[“yhji”] = $hjiarray[$b];
$myarray[“ykji”] = $kjiarray[$b];
$myarray[“kddi”] = $kddiarray[$b];
$myarray[“dhgan”] = $hganarray[$c];
$myarray[“dkgan”] = $kganarray[$c];
$myarray[“dhji”] = $hjiarray[$d];
$myarray[“dkji”] = $kjiarray[$d];
$myarray[“week”] = $kweekarray[$e];
$myarray[“leap”] = $leap;
return $myarray;
}
?>