영원한사랑

인터넷정보 +1252
$res    = check_agent();
print_r($res);

/*

제작자이름 : navyism
제작자메일 : navyism@chol.com
관련사이트 : http://navyism.com

*/

function check_agent()
{
    global
$HTTP_SERVER_VARS;

   
/*-----------------------------------------------------------------

    OS Pattern

    'keyword' => 'name',

    -----------------------------------------------------------------*/
   
$OS    = array(

       
/* PC */
       
array('Windows CE', 'Windows CE'),
        array(
'Win98', 'Windows 98'),
        array(
'Windows 9x', 'Windows ME'),
        array(
'Windows me', 'Windows ME'),
        array(
'Windows 98', 'Windows 98'),
        array(
'Windows 95', 'Windows 95'),
        array(
'Windows NT 6', 'Windows Vista'),
        array(
'Windows NT 5.2', 'Windows 2003/XP x64'),
        array(
'Windows NT 5.01', 'Windows 2000 SP1'),
        array(
'Windows NT 5.1', 'Windows XP'),
        array(
'Windows NT 5', 'Windows 2000'),
        array(
'Windows NT', 'Windows NT'),
        array(
'Macintosh', 'Macintosh'),
        array(
'Mac_PowerPC', 'Mac PowerPC'),
        array(
'Unix', 'Unix'),
        array(
'bsd', 'BSD'),
        array(
'Linux', 'Linux'),
        array(
'Wget', 'Linux'),
        array(
'windows', 'ETC Windows'),
        array(
'mac', 'ETC Mac'),

       
/* MOBILE */
       
array('PSP', 'PlayStation Portable'),
        array(
'Symbian', 'Symbian PDA'),
        array(
'Nokia', 'Nokia PDA'),
        array(
'LGT', 'LG Mobile'),
        array(
'mobile', 'ETC Mobile'),

       
/* WEB ROBOT */
       
array('Googlebot', 'GoogleBot'),
        array(
'OmniExplorer', 'OmniExplorerBot'),
        array(
'MJ12bot', 'majestic12Bot'),
        array(
'ia_archiver', 'Alexa(IA Archiver)'),
        array(
'Yandex', 'Yandex bot'),
        array(
'Inktomi', 'Inktomi Slurp'),
        array(
'Giga', 'GigaBot'),
        array(
'Jeeves', 'Jeeves bot'),
        array(
'Planetwide', 'IBM Planetwide bot'),
        array(
'bot', 'ETC Robot'),
        array(
'Crawler', 'ETC Robot'),
        array(
'library', 'ETC Robot'),

    );


   
/*-----------------------------------------------------------------

    Browser Pattern

    'keyword' => 'name',

    -----------------------------------------------------------------*/
   
$BW    = array(

       
/* BROWSER */
       
array('MSIE 2',    'InternetExplorer 2'),
        array(
'MSIE 3',    'InternetExplorer 3'),
        array(
'MSIE 4',    'InternetExplorer 4'),
        array(
'MSIE 5',    'InternetExplorer 5'),
        array(
'MSIE 6',    'InternetExplorer 6'),
        array(
'MSIE 7',    'InternetExplorer 7'),
        array(
'MSIE', 'ETC InternetExplorer'),
        array(
'Firefox', 'FireFox'),
        array(
'Safari', 'Safari'),
        array(
'Opera', 'Opera'),
        array(
'Lynx', 'Lynx'),
        array(
'LibWWW', 'LibWWW'),
        array(
'Konqueror', 'Konqueror'),
        array(
'Internet Ninja', 'Internet Ninja'),
        array(
'Download Ninja', 'Download Ninja'),
        array(
'WebCapture', 'WebCapture'),
        array(
'LTH', 'LTH Browser'),
        array(
'Gecko', 'Gecko compatible'),
        array(
'Mozilla', 'Mozilla compatible'),
        array(
'wget', 'Wget command'),

       
/* MOBILE */
       
array('PSP', 'PlayStation Portable'),
        array(
'Symbian', 'Symbian PDA'),
        array(
'Nokia', 'Nokia PDA'),
        array(
'LGT', 'LG Mobile'),
        array(
'mobile', 'ETC Mobile'),

       
/* WEB ROBOT */
       
array('Googlebot', 'GoogleBot'),
        array(
'OmniExplorer', 'OmniExplorerBot'),
        array(
'MJ12bot', 'majestic12Bot'),
        array(
'ia_archiver', 'Alexa(IA Archiver)'),
        array(
'Yandex', 'Yandex bot'),
        array(
'Inktomi', 'Inktomi Slurp'),
        array(
'Giga', 'GigaBot'),
        array(
'Jeeves', 'Jeeves bot'),
        array(
'Planetwide', 'IBM Planetwide bot'),
        array(
'bot', 'ETC Robot'),
        array(
'Crawler', 'ETC Robot'),

    );

    foreach(
$OS as $val)
    {
        if(
eregi($val[0], $_SERVER['HTTP_USER_AGENT']))
        {
           
$os_name    = $val[1];
            break;
        }
    }

    foreach(
$BW as $val)
    {
        if(
eregi($val[0], $_SERVER['HTTP_USER_AGENT']))
        {
           
$br_name    = $val[1];
            break;
        }
    }

   
$res    = array(

       
'os' => $os_name,
       
'br' => $br_name

   
);

    return
$res;
}




비슷한글 : http://haco.tistory.com/1414

1970년 이전 날짜에대해서는 date와 mktime 으로 값을 구할수가 없기에 찾아봤더니..1902년 부터인가를 구하는 프로그램이 있더군요..
그래서 그냥 1년 부터 구하도록 만들었습니다.
근데 문제는. 1년부터 1582년 10월 14일 까지는.. 가상의 날짜입니다.
현재 사용되는 달력은 1582년 10월 15일부터 고정되었다고 하더군요..

함수는. new_date와 new_mktime 이며 사용법은 같습니다.
그리고 아직 미완성이기 때문에.. 주로 사용되는 포맷만 구현되어있습니다 ^^;;
거기에 하나더 미완성인게.. new_mktime 의 인자값으로 음수가 들어갈경우는 처리가 되어있지 않습니다.. 지금 작업할게 있어서요 ㅋ
아래 내용을 복사해서 라이브러리에 넣어두고 사용하시면됩니다.
버그나 수정사항은 직접고치셨다면 여기에 올려주시면 감사하겠습니다. (__)
(902년 부터 뽑아주는 함수를 조금 참고했습니다.)

<?
/*
+---------------------------------------------------------------------+
| Copyleft (L) 2005.1.9 by NiL |
+---------------------------------------------------------------------+
| 본 프로그램은 제작자와는 전혀 무관하게 맘대로 복사, 수정, 파손 |
| 또는, 대여, 판매할수 있습니다. |
| 수정된 소스는 제작자와 많은 사람들과 공유되기를 원합니다. |
+---------------------------------------------------------------------+
| Author: Park J. NiL <nils@jnils.net> |
+---------------------------------------------------------------------+
*/

function is_leaf_year($y) {
    if(($y % 400) == 0) return true;
    else if(($y % 100) == 0) return false;
    else if(($y % 4) == 0) return true;
    else return false;
}

function new_mktime($hour, $min, $sec, $month, $day, $year) {
    $hour = intval($hour);
    $min = intval($min);
    $sec = intval($sec);
    $month = intval($month);
    $day = intval($day);
    $year = intval($year);

    $month_arr[0] = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    $month_arr[1] = array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

    $_days = 0;
    $_secs = 0;

    $normal_year_days = 365;
    $leaf_year_days = 366;

    $_day_sec = 86400;
    $_hour_sec = 3600;
    $_min_sec = 60;

    $_day_min = 1440;
    $_hour_min = 60;

    $_day_hour = 24;

    $_timestamp = 0;

    // 초 더하기
    $secs = $sec;
   
    // 분을 초로
    $secs += $min * $_min_sec;

    // 시를 초로
    $secs += $hour * $_hour_sec;

    // 날 더하기
    $days = $day;
   
    // 월을 날짜로
    $_year_cnt = floor(($month - 1) / 12);
    $month = $month % 12;
    for($i = 0; $i < $month - 1; $i++)
    {
        $_month = ($i % 12) + 1;
        $leaf_flg = 0; // 기본값으로 윤달 아님

        if($_month == 2) // 2월이면 윤달 체크
        {
            if(is_leaf_year($year + $_year_cnt)) $leaf_flg = 1;
            else $leaf_flg = 0;
        }
        $days += $month_arr[$leaf_flg][$i];
    }

    // 년을 날짜로
    $year += $_year_cnt;
    for($i = 1; $i < $year; $i++)
    {
        $_year = $i;
        $days += is_leaf_year($_year) ? $leaf_year_days : $normal_year_days;
    }

    $_timestamp = ($days * $_day_sec) + $secs;
    return $_timestamp;
}

function get_days(&$t)
{
    $day_sec = 86400;
    $days = floor($t / $day_sec);
    $t = $t - (floor($t / $day_sec) * $day_sec);
    return $days;
}

function get_date($d)
{
    $leaf_year_days = 366;
    $normal_year_days = 365;
   
    $month_arr[0] = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    $month_arr[1] = array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    $year = 0;
    $month = 0;
    $day = 0;

    $flg = true;
    while($flg)
    {
        $year++;
        if(is_leaf_year($year))
        {
            if($d > $leaf_year_days) $d -= $leaf_year_days;
            else $flg = false;
            $leaf_flg = 1;
        }
        else
        {
            if($d > $normal_year_days) $d -= $normal_year_days;
            else $flg = false;
            $leaf_flg = 0;
        }
    }

    $month_cnt = 0;
    while($d > $month_arr[$leaf_flg][$month_cnt])
    {
        $d -= $month_arr[$leaf_flg][$month_cnt];
        $month_cnt++;
    }
    $month = $month_cnt + 1;
    $day = $d;
    return sprintf("%04d%02d%02d", $year, $month, $day);
}

function get_time($t)
{
    $hour_sec = 3600;
    $min_sec = 60;

    $hour = floor($t / $hour_sec);
    $min = floor(($t % $hour_sec) / $min_sec);
    $sec = $t % $min_sec;

    return sprintf("%02d%02d%02d", $hour, $min, $sec);
}

function cal_date($t)
{
    if($t == "")
    {
        return date("YmdHis");
    }
    else
    {
        $days = get_days(&$t);
        $date = get_date($days);
        $time = get_time($t);
        return $date.$time;
    }
}

function new_date()
{
    if(func_num_args() != 1 && func_num_args() != 2) return false;
    $format = func_get_arg(0);
    $timestamp = func_get_arg(1);
    $date = cal_date($timestamp);

    $year = substr($date, 0, 4);
    $month = substr($date, 4, 2);
    $day = substr($date, 6, 2);
    $hour = substr($date, 8, 2);
    $min = substr($date, 10, 2);
    $sec = substr($date, 12, 2);

    $out_buf = "";
    for($i = 0; $i < strlen($format); $i++)
    {
        $c = substr($format, $i, 1);
        switch ($c)
        {
            case "a":
                $out_buf .= $hour < 12 ? "am" : "pm";
                break;
            case "A":
                $out_buf .= $hour < 12 ? "AM" : "PM";
                break;
            case "B":
                break;
            case "c":
                break;
            case "d":
                $out_buf .= sprintf("%02d", $day);
                break;
            case "D":
                break;
            case "F":
                break;
            case "g":
                $out_buf .= sprintf("%d", (($hour - 1) % 12) + 1);
                break;
            case "G":
                $out_buf .= sprintf("%d", $hour);
                break;
            case "h":
                $out_buf .= sprintf("%02d", (($hour - 1) % 12) + 1);
                break;
            case "H":
                $out_buf .= sprintf("%02d", $hour);
                break;
            case "i":
                $out_buf .= sprintf("%02d", $min);
                break;
            case "I":
                break;
            case "j":
                $out_buf .= sprintf("%d", $day);
                break;
            case "l":
                break;
            case "L":
                break;
            case "m":
                $out_buf .= sprintf("%02d", $month);
                break;
            case "M":
                break;
            case "n":
                $out_buf .= sprintf("%d", $month);
                break;
            case "O":
                break;
            case "r":
                break;
            case "s":
                $out_buf .= sprintf("%02d", $sec);
                break;
            case "S":
                break;
            case "t":
                break;
            case "T":
                break;
            case "U":
                break;
            case "w":
                break;
            case "W":
                break;
            case "Y":
                $out_buf .= sprintf("%04d", $year);
                break;
            case "y":
                $out_buf .= substr(sprintf("%04d", $year), 2, 2);
                break;
            case "z":
                break;
            case "Z":
                break;
            default :
                $out_buf .= $c;
        }
    }
    return $out_buf;
}
?>

사용법 예제입니다.
[jnils@hosting1 typhoon]$ cat ./test.php
#!/usr/local/bin/php
<?
include \"lib.php\";
echo date(\"YmdHis\", mktime(71, 71, 71, 15, 445, 1999)).\"\\n\";
echo new_date(\"YmdHis\", new_mktime(71, 71, 71, 15, 445, 1999)).\"\\n\";
?>
[jnils@hosting1 typhoon]$ ./test.php
20010522001211
20010522001211


http://www.phpschool.com/bbs2/inc_view.html?id=11707&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=last1year&category_id=&s_que=19

ASP 기초 정리 - 황재선님 제공

   강좌 최초 작성일 : 2000년 x월 x일
   강좌 최종 수정일 : 2001년 7월 17일

   작성자 : Helios7(황 재선) : http://www.neovis.pe.kr
   편집자 : Taeyo(김 태영)

   강좌 제목 : ASP 기초 - 날짜와 시간 함수

4.2 날짜와 시간 함수

날짜와 시간에 관련된 내용을 표현하는 함수들도 ASP에서는 중요한 비중을 가진다. 시스템에서 제공하지 못하는 여러 가지 기능들을 이런 함수들을 통해서 구현이 가능하다. 특히 날짜 연산에 대한 코드 작성시 많은 도움을 얻을 수 있는 날짜와 시간 함수들에 대해서 알아보자.

1) CDate

Date 하위 형식의 Variant로 변환된 식을 반환한다.

구문 : CDate(date)

date 인수는 유효한 날짜식이면 된다.
변환값은 컴퓨터의 날짜/시간 설정에 따르며 짧은 날짜 표기법으로 출력된다.

● cdate.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
MyDate = "2000년 12월 11일"
Response.Write MyDate & "<BR>"
Response.Write CDate(MyDate)
%>
---------------------------------------------------------------------------------------------------


[그림 2-1] cdate.asp 실행 결과


2) Date

현재 시스템의 날짜를 반환한다.

구문 : Date

● date.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write Date
%>
---------------------------------------------------------------------------------------------------


[그림 2-2] date.asp 실행 결과


3) DateAdd

지정된 날짜에 시간을 추가하거나 뺀 새로운 날짜를 반환한다.

구문 : DateAdd(interval, number, date)

● interval : 필수적인 인수로 interval을 추가한 날짜를 나타내는 문자식이다. 그 값에 대해서는 아래의 표를 참조하라.
● number : 필수적인 인수로 추가할 간격 수의 수식이다. 수식에서 양수는 미래의 날짜, 음수는 과거의 날짜이다.
● date : 필수적인 인수로 interval을 추가한 날짜를 나타내는 Variant 또는 리터럴이다.

● interval 인수
---------------------------------------------------------------------------------------------------
설정 설명

yyyy 년
q 분기
m 월
y 일(일년 기준)
d 일
w 요일
ww 주(일년 기준)
h 시
n 분
s 초
---------------------------------------------------------------------------------------------------

● dateadd.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
MyDate = Date
Response.Write "오늘날짜 : " & MyDate & "<BR>"
Response.Write "오늘날짜+3개월 : " & DateAdd("m",3,MyDate) & "<BR>"
Response.Write "오늘날짜-3개월 : " & DateAdd("m",-3,MyDate) & "<BR>"
%>
---------------------------------------------------------------------------------------------------


[그림 2-3] dateadd.asp


4) DateDiff

주어지는 두 날짜의 간격을 반환한다.

구문 : DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

● interval : 필수적인 인수로 날짜1과 날짜2 사이의 차이를 계산하는 데 사용할 interval의 문자식이다. 그 값에 대해서는 아래의 표를 참조하라.
● date1, date2 : 필수적인 인수로 날짜식에서 계산에 사용할 두 날짜이다.
● firstdayofweek : 선택적인 인수로 요일을 지정하는 상수로 지정하지 않으면 일요일로 간주한다. 그 값에 대해서는 아래의 표를 참조하라.
● firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수이다. 지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다. 그 값에 대해서는 아래의 표를 참조하라.

● interval 인수
---------------------------------------------------------------------------------------------------
설정 설명

yyyy 년
q 분기
m 월
y 일(일년 기준)
d 일
w 요일
ww 주(일년 기준)
h 시
n 분
s 초
---------------------------------------------------------------------------------------------------

● firstdayofweek 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbSunday 1 일요일(기본값)
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
---------------------------------------------------------------------------------------------------

● firstweekofyear 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값)
vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작
vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작
---------------------------------------------------------------------------------------------------

● datediff.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
FirstDate = CDate("2000년 1월 1일")
MyDate = Date
Response.Write FirstDate & "부터 지금까지 " & DateDiff("y", FirstDate, MyDate) & "일 경과 <BR>"
Response.Write FirstDate & "부터 지금까지 " & DateDiff("h", FirstDate, MyDate) & "시 경과 <BR>"
Response.Write FirstDate & "부터 지금까지 " & DateDiff("n", FirstDate, MyDate) & "분 경과 <BR>"
Response.Write FirstDate & "부터 지금까지 " & DateDiff("s", FirstDate, MyDate) & "초 경과 <BR>"
%>
---------------------------------------------------------------------------------------------------


[그림 2-4] datediff.asp 실행 결과


5) DatePart

주어진 날짜의 지정된 부분을 반환한다.

구문 : DatePart(interval, date[, firstdayofweek[, firstweekofyear]])

● interval : 필수적인 인수로 반환할 시간 간격의 문자식이다. 그 값에 대해서는 아래의 표를 참조하라.
● date : 필수적인 인수로 계산할 날짜식이다.
● firstdayof week : 선택적인 인수로 요일을 지정하는 상수로서 지정하지 않으면 일요일로 간주한다. 그 값에 대해서는 아래의 표를 참조하라.
● firstweekofyear : 선택적인 인수로 연도를 기준으로 한 첫째 주를 지정하는 상수이다. 지정하지 않으면 1월 1일을 포함하는 주를 첫째 주로 간주한다. 그 값에 대해서는 아래의 표를 참조하라.

● interval 인수
---------------------------------------------------------------------------------------------------
설정 설명

yyyy 년
q분기
m 월
y 일(일년 기준)
d 일
w 요일
ww 주(일년 기준)
h 시
n 분
s 초
---------------------------------------------------------------------------------------------------

● firstdayofweek 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbSunday 1 일요일(기본값)
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
---------------------------------------------------------------------------------------------------

● firstweekofyear 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS(National Language Support) API 설정 사용
vbFirstJan1 1 1월 1일을 포함하는 주에서 시작(기본값)
vbFirstFourDays 2 새해의 처음 4일을 포함하는 주에서 시작
vbFirstFullWeek 3 새해의 처음 한 주일(7일)을 포함하는 주에서 시작
---------------------------------------------------------------------------------------------------

● datepart.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Today = Now
Response.Write "오늘 " & Today & "은 " & DatePart("q", Today) & "분기 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-5] datapart.asp 실행 결과


6) DateSerial

지정된 년, 월, 일의 Date 하위 형식인 Variant를 반환한다. 즉 임의의 숫자를 입력받아 날짜 형식으로 반환하는 함수이다.

구문 : DateSerial(year, month, day)

● year : 100에서 9999까지의 수 또는 수식
● month : 모든 수식
● day : 모든 수식

● dateserial.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write DateSerial(2000+1, 12+3, 2+5)
%>
---------------------------------------------------------------------------------------------------


[그림 2-6] dateserial.asp 실행 결과


7) DateValue

Date 하위 형식의 Variant를 반환한다.

구문 : DateValue(date)

대개 date 인수는 100년 1월 1일에서 9999년 12월 31일까지를 나타내는 문자식으로 이 범위에 있는 날짜, 시간 또는 날짜/시간을 나타내는 식이다. date 인수에 시간 정보가 있는 경우 DateValue 함수에서는 그 정보를 반환하지 않는다. 그러나 date 인수에 "12:11"처럼 잘못된 시간 정보가 있으면 오류가 발생하게 된다.

date 인수가 유효한 날짜 구분 기호로 분리된 숫자만 있는 문자열인 경우, DateValue 함수에서는 컴퓨터에 설정한 간단한 표시 날짜 형식에 따라 년, 월, 일에 대한 순서로 인식하게 된다. 또한 정식이나 약식의 월 이름을 포함하고 있는 명확한 날짜도 인식한다. 예를 들어 DateValue 함수는 1/23/2001과 1/23/01 뿐만 아니라 January 23,2001과 Jan 23,2001을 모두 인식한다.

date 인수에서 연도 부분을 생략할 경우 DateValue 함수는 컴퓨터 시스템에 설정되어 있는 현재 연도를 사용한다.

● datevalue.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write DateValue("2000년 12월 25일")
%>
---------------------------------------------------------------------------------------------------


[그림 2-7] datevalue.asp 실행 결과


8) Day

날짜를 나타내는 1에서 31까지의 정수를 반환한다.

구문 : Day(date)

date 인수는 날짜를 표현하는 식이다. date 인수에 Null이 있으면 Null을 반환한다.

● day.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
   Response.Write Day("2000년 12월 25일")
%>
---------------------------------------------------------------------------------------------------


[그림 2-8] day.asp 실행 결과


9) Hour

하루의 시간을 나타내는 0에서 23까지의 정수를 반환한다.

구문 : Hour(time)

time 인수는 시간을 나타내는 식이다. time이 Null이면 Null을 반환한다.

● hour.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다. <BR>"
Response.Write "시간은 " & Hour(Now) & "시 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-9] hour.asp 실행 결과

10) IsDate

한 식이 날짜로 변환될 수 있는지 여부를 나타내는 부울 값을 반환한다. 날짜 형식을 구분할 때 주로 사용한다.

구문 : IsDate(expression)

expression 인수는 날짜식 또는 날짜나 시간으로 인식될 수 있는 문자식이다.
IsDate 함수는 해당 식이 날짜이거나 유효한 날짜로 변환될 수 있는 경우 True를, 그렇지 않으면 False를 반환합니다. Microsoft Windows의 유효한 날짜 범위는 서기 100년 1월 1일에서 서기 9999년 12월 31일까지이지만, 운영 체제에 따라 그 범위가 달라진다.

● isdate.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
FirstDate = "2000년 12월 11일"
SecondDate = "Hello! ASP~"
If IsDate(FirstDate) Then
   Response.Write FirstDate & "는 날짜형식입니다. <BR>"
Else
   Response.Write FirstDate & "는 날짜형식이 아닙니다. <BR>"
End If
If IsDate(SecondDate) Then
   Response.Write SecondDate & "는 날짜형식입니다. <BR>"
Else
   Response.Write SecondDate & "는 날짜형식이 아닙니다. <BR>"
End If
%>
---------------------------------------------------------------------------------------------------


[그림 2-10] isdate.asp 실행 결과


11) Minute

시간의 분을 나타내는 0에서 59까지의 정수를 반환한다.

구문 : Minute(time)

time 인수는 시간을 나타내는 식이다. time에 Null이 있으면 Null을 반환한다.

● minute.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다. <BR>"
Response.Write "분은 " & Minute(Now) & "분 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-11] minute.asp 실행 결과


12) Month

년의 월을 나타내는 1에서 12까지의 정수를 반환한다.

구문 : Month(date)

date 인수는 날짜를 나타내는 식이다. date에 Null이 있으면 Null을 반환한다.

● month.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다. <BR>"
Response.Write Month(Now) & "월 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-12] month.asp 실행 결과


13) MonthName

지정한 월을 나타내는 문자열을 반환한다.

구문 : MonthName(month[, abbreviate])

● month : 필수적인 인수로 1월은 1, 2월은 2, 등등으로 월을 나타내는 숫자이다.
● abbreviate : 선택적인 인수로 월 이름을 약어 형태로 표시할지 여부를 나타내는 부울 값이다. 생략하면 기본값인 False가 되며, 월 이름을 완전한 형태로 표시한다.

● monthname.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write MonthName(12, true) & "<BR>"
Response.Write MonthName(12, false) & "<BR>"
%>
---------------------------------------------------------------------------------------------------


[그림 2-13] monthname.asp 실행 결과


14) Now

컴퓨터의 시스템 날짜와 시간에 따른 현재 날짜와 시간을 반환한다.

구문 : Now

● now.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-14] now.asp 실행 결과


15) Second

분의 초를 나타내는 0에서 59까지의 정수를 반환한다.

구문 : Second(time)

time 인수는 시간을 나타내는 식이다. time 인수에 Null이 있으면 Null을 반환한다.

● second.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다. <BR>"
Response.Write Second(Now) & "초 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-15] second.asp 실행 결과


16) Time

현재 시스템 시간을 나타내는 Date 하위 형식의 Variant를 반환한다.

구문  : Time

● time.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Time & " 입니다. <BR>"
%>
---------------------------------------------------------------------------------------------------


[그림 2-16] time.asp 실행 결과


17) Timer

자정 이후 경과한 초 수를 나타내는 Single 값을 반환한다.

구문 : Timer

● timer.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write Timer & " 초 경과 입니다. <BR>"
%>
---------------------------------------------------------------------------------------------------


[그림 2-17] timer.asp 실행 결과


18) TimeSerial

지정한 년, 월, 일의 Date 하위 형식인 Variant를 반환한다.

구문 : TimeSerial(hour, minute, second)

● time : 0(오전 12:00)에서 23(오후 11:00) 사이의 수(0과 23 포함) 또는 수식
● minute : 모든 수식
● second : 모든 수식

10시 51분 59초처럼 어떤 시간을 지정하려면 각 TimeSerial 인수의 숫자는 해당 인수의 허용 범위 안에 있어야 한다. 즉, 시간은 0-23이며, 분과 초는 0-59입니다. 그러나 특정 시간의 앞뒤에 시, 분, 초를 나타내는 수식을 사용하여 각 인수의 상대적인 시간을 지정할 수도 있다.

● timeserial.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write TimeSerial(23, 12, 11)
%>
---------------------------------------------------------------------------------------------------


[그림 2-18] timeserial.asp 실행 결과


19) TimeValue

시간을 포함하는 Date 하위 형식의 Variant를 반환한다.

구문 : TimeValue(time)

대개 time 인수는 0:00:00(오전 12:00:00)에서 23:59:59(오후 11:59:59)까지의 시간을 나타내는 문자식으로 이 범위에 있는 시간을 나타내는 식도 time 인수가 될 수 있다. time에 Null이 있으면 Null을 반환한다.

● timevalue.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write TimeValue("오후 11:11:11")
%>
---------------------------------------------------------------------------------------------------


[그림 2-19] timevalue.asp 실행 결과


20) Weekday

요일을 나타내는 정수를 반환한다.

구문 : Weekday(date, [firstdayofweek])

● date : 날짜를 나타내는 식이다. date에 Null이 있으면 Null을 반환한다.
● firstdayofweek : 첫째 요일을 지정하는 상수이다. 생략하면 vbSunday로 간주한다.

● firstdayofweek 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS( National Language Support) API 설정 사용
vbSunday 1 일요일
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
---------------------------------------------------------------------------------------------------

● Weekday 함수 반환 값
---------------------------------------------------------------------------------------------------
상수 값 설명

vbSunday 1 일요일
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
---------------------------------------------------------------------------------------------------

● weekday.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
MyDate = #2000-12-25#
Response.Write Weekday(MyDate)
%>
---------------------------------------------------------------------------------------------------


[그림 2-20] weekday.asp 실행 결과


21) WeekdayName

지정된 요일을 나타내는 문자열을 반환한다.

구문 : WeekDayName(weekday, abbreviate, firstdayofweek)

● weekday : 필수적인 인수로 요일을 나타내는 숫자이다. firstdayofweek 설정에 따라 각 요일의 값이 다르다.
● abbreviate : 선택적인 인수로 요일 이름을 약어로 나타낼지 여부를 나타내는 부울 값이다. 생략하면 기본값인 False가 되며 요일 이름을 완전한 형태로 나타낸다.
● firstdayofweek : 선택적인 인수로 첫째 요일을 나타내는 숫자 값이다. 그 값에 대해서는 아래의 표를 참조하라.

● firstdayofweek 인수
---------------------------------------------------------------------------------------------------
상수 값 설명

vbUseSystem 0 NLS( National Language Support) API 설정 사용
vbSunday 1 일요일
vbMonday 2 월요일
vbTuesday 3 화요일
vbWednesday 4 수요일
vbThursday 5 목요일
vbFriday 6 금요일
vbSaturday 7 토요일
---------------------------------------------------------------------------------------------------

● weekdayname.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
MyDate = #2000-12-25#
Response.Write Weekdayname(Weekday(MyDate))
%>
---------------------------------------------------------------------------------------------------


[그림 2-21] weekdayname.asp 실행 결과


22) Year

연도를 나타내는 정수를 반환한다.

구문 : Year(date)

date 인수는 날짜를 나타내는 식이다. date에 Null이 있다면 Null을 반환한다.

● year.asp
---------------------------------------------------------------------------------------------------
<%@ Language=VBScript %>
<%
Response.Write "지금 시간은 " & Now & " 입니다. <BR>"
Response.Write Year(Now) & "년도 입니다."
%>
---------------------------------------------------------------------------------------------------


[그림 2-22] year.asp 실행 결과


http://www.taeyo.pe.kr/lecture/2_beginner_hwang/4_2.htm

php 에서의 날짜관련함수 및 계산방법입니다.

출력.
mktime(시,분,초,월,일,년) 유닉스 타임(타임스탬프:1970년을기준으로부터 1초단위숫자)으로 값을 출력합니다.
타임스탬프를 날짜형식으로 볼수 있는 함수가 date 입니다.
http://man.phpschool.com/manual/kr/function.date.phpdate : 함수레퍼런스
date는 날짜가 들어가지 않으면 기본적으로 오늘을 뜻합니다.
date("Y-m-d") ==> 오늘 날짜
mktime 으로 얻은 값을 date 함수로 특정 형식으로 출력
date("Y-m-d", mktime(0, 0, 0, 12, 32, 1997)); ==> 1998-01-01

출력의 할때 편리한 점은 1월32일은 2월1 일로 나온다는 것입니다.
그럼 2005년 1월부터 100일 지난 날은 몇일일까요?
응용 date("Y-m-d", mktime(0, 0, 0, 0 , 1, 101, 2005)); ==> 2005년 04월 11일
(1월1일은 포함하면 안되겠죠? 그래서 하루 더 증가~)
출력의 기본입니다.

계산.
기본연산은 strtotime("각종연산") 으로 합니다.
타임스탬프를 리턴합니다.
이말은 date 형으로 출력할 수 있다는 말입니다. ^^
http://man.phpschool.com/manual/kr/function.strtotime.php" :strtotime 함수레퍼런스

strtotime 은 날짜가 들어가지 않으면 기본적으로 오늘을 뜻합니다.
그리고 이 함수 또한 일수가 넘어가면 다음달로 계산됩니다.
strtotime("+3 day") => 오늘에서 3일 후, 물론 달이 넘어가면 1일로 계산됨
이 함수를 개인적으로 좋아하는 이유가 mktime 을 사용할 필요가 없다는 점입니다.
(필요가 있을 경우를 찾아주세요. ㅡ_-+)

date("Y년 m월 d일 h:m:s",mktime(12,12,1,1,2,2005))
date("Y년 m월 d일 h:m:s",strtotime("2005-01-02 12:12:01"))

이 두 함수는 같은 2005년 01월 02일 12:01:01 을 나타냅니다.
물론 사용하기도 strtotime 이 훨씬 쉽습니다.

그럼 2005년 1월부터 100일 지난 날은 몇일인지 strtotime 을 이용해서 확인해봅시다.
응용 date("Y-m-d", strtotime("2005-01-01 +100 day")); ==> 2005년 04월 11일
위에서
+100 day 는 +2 month 나 +10 year 와 같이 특정 연산이 가능합니다.
그래서 더욱 멋지게 보입니다. ㅡ_-+

두날짜의 연산은 타임스탬프로 두날짜의 차이값을 얻어서 86400 (60초*60분*24시) 로 나누면 몇일인지 나옵니다.
intval((strtotime("2005-01-10")-strtotime("2005-01-02"))/86400)    =>    8

이만하면 PHP 에서 웬만한 날짜 계산을 하실 수 있습니다.




참고용.
PHP의 경우는 strtotime 함수로 해결
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=38930

ASP의 경우는 DateAdd 함수를 이용한 방법
http://www.taeyo.pe.kr/lecture/2_beginner_hwang/4_2.htm

MySQL 은 [본문]과 내용에 대한 메뉴얼..
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

MsSQL 도 ASP와 마찬가지로 DateAdd 로 처리가능
http://msdn2.microsoft.com/en-us/library/aa258863(SQL.80).aspx

PC에서 사용하는 용량과 속도의 단위사 모두 정리

PC에서 사용하는 단위사에 대해서는 [하드웨어 팔만대장경] 책에 잘 정리되어 있습니다.
아래 내용은 그 책 본문 중 일부입니다.

------------------------------------

PC에서 사용하는 단위들

PC를 이용하기 위해서 몇 가지 알아두어야 할 단위가 있다. 용량에 관한 단위로 비트(bit)와 바이트(Byte)를 알아두어야 하며, 속도에 관한 단위로 헤르쯔(Hz)를 알아두어야 한다.

용량의 단위인 비트(bit)와 바이트(Byte)

1비트는 2진수의 한 단위를 뜻한다
비트라는 것은 BInary Digit의 약자로 이진수라는 뜻이다. 즉 0과 1로 나타낼 수 있는 이진수의 최소단위를 비트라고 한다. 이 단위는 컴퓨터가 계산을 할 때 사용하는 단위다. 8비트라고 하면 2의 8제곱이 된다. 주의할 점은 2 곱하기 8이 아니라, 2의 여덟제곱이라는 점이다. 따라서 8비트를 우리가 사용하는 십진수로 계산하면 28=2×2×2×2×2×2×2×2=256이 된다. 만약 컴퓨터가 8비트라고 하면 한 번 동작할 때 256 가지 경우의 수를 처리한다고 생각하면 된다. 따라서 16비트는 2의 16제곱인 65536이라는 수를 한 번에 처리할 수 있는 컴퓨터인 셈이다.
1바이트(Byte)는 8비트를 말한다. 2의 8제곱이므로 1비트가 0과 1의 두 가지 숫자를 표현할 수 있다면, 1바이트는 0부터 255까지 256가지 숫자를 표현할 수 있는 단위인 것이다.
바이트는 다시 키로바이트, 메가바이트 등으로 단위가 올라간다.

**표: 용량의 단위

1바이트(Byte)=8비트(bit)
1키로바이트(KiloByte)= 1024바이트
1메가바이트(MegaByte)= 1024키로바이트
1기가바이트(GigaByte)= 1024메가바이트
1테라바이트(TeraByte)= 1024기가바이트
1페타바이트(PetaByte)=1024테라바이트
1엑사바이트(ExaByte)= 1024페타바이트


**잠깐: 1키로바이트가 1024바이트인 이유

우리는 일상생활에서 많은 단위를 사용한다. 그리고 일상생활에서 키로(K)가 붙은 단위는 보통 1,000배를 의미한다. 1Kl는 1,000l고 1Kg은 1,000g, 1Km는 1,000미터다. 그런데 컴퓨터에서는 1키로바이트(KByte)가 1,024바이트다. 왜 컴퓨터에서는 1,000배가 아니라 1,024배일까? 컴퓨터가 1,000배보다는 1,024배를 훨씬 빨리 계산하기 때문에, 좀더 빠른 속도를 얻기 위해서 1,024배로 약속한 것이다.
컴퓨터는 0과 1로 된 이진수만으로 계산을 한다. 전기적인 신호에 의해서 음(-)이나 양(+), 또는 켬(ON)이나 끔(OFF) 중에서 하나를 선택하고 이를 통해서 어떤 동작을 하고 있다. 때문에 컴퓨터는 계산을 할 때 2진수를 사용한다. 우리가 흔히 말하는 비트(bit)라는 말도 바로 이진수라는 뜻의 BInary digiT의 약자다. 그리고 8비트를 1바이트라고 하는데, 8비트는 2 곱하기 8이 아니라 2의 제곱을 말한다. 그러니까 8비트는 십진수로 256이 되는 셈이다.
이처럼 컴퓨터는 2진수로 계산하는 것이 가장 편하고 빠르기 때문에 모든 숫자는 2진수 단위로 관리한다. 그래서 컴퓨터는 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024와 같이 2의 제곱으로 된 단위를 사용한다. 컴퓨터가 사람들이 사용하는 십진수로 계산하려면 매우 힘들다. 이 때문에 컴퓨터에서는 1키로바이트를 1,000바이트가 아닌 2의 10승인 1,024바이트로 약속하고 사용하는 것이다.
따라서 1메가바이트는 1,024x1,024=1,048,576이라는 숫자가 나온다. 왜 1메가바이트가 1,000,000바이트가 아닌지 이해할 수 있을 것이다. 우리는 통상 1메가바이트를 부르기 편하게 백 만 바이트라고 말하지만 정확하게 말하자면 1,048,576바이트인 셈이다.

속도의 단위인 헤르쯔(Hz)

헤르쯔는 1사이클의 주파수를 말한다
컴퓨터의 용량을 나타낼 때는 바이트를 주로 사용하지만 속도를 나타낼 때는 헤르쯔(Hz)를 사용한다. 헤르쯔는 전파의 한 사이클을 말하는데 컴퓨터에서는 각 부품이 동작할 때의 기준이 되는 시간이다. 즉 우리가 어떤 신호를 할 때마다 삽질을 한 번 한다면 그 신호에 해당하는 것이 주파수인 것이다. 마치 공장에서 컨베어벨트가 한 번 이동해야 각기 자기 앞에 놓인 부품을 가지고 작업해서 최종적으로 컨베어벨트가 모두 돌면 제품 하나가 만들어지는 것과 같다. 이처럼 컨베어벨트가 자기 앞을 몇 번 지나느냐 하는 문제가 컴퓨터에서 보면 주파수가 몇 번이냐와 마찬가지인 것이다. 1시간 동안 컨베어벨트가 자주 움직일 때 생산되는 제품이 많은 것처럼 컴퓨터 역시 같은 시간 동안 주파수가 많은 것이 더 빨리 일을 한다.

1초 동안 한 번의 주파수를 발생시키면 1Hz에 해당한다.

1키로헤르쯔(KHz)= 1000Hz
1메가헤르쯔(MHz)= 1000KHz
1기가헤르쯔(GHz)= 1000MHz

**잠깐: 1MB와 1Mb의 차이

디스크의 용량이나 전송속도를 표시할 때 1MB라고 표시하는 것과 1Mb는 차이가 있다. 1MB는 1Mega Byte를 뜻하고 1Mb는 1Mega bit를 뜻하기 때문이다. 따라서 광고문을 보고 용량을 계산할 때는 MB인지 Mb인지를 구별해서 봐야 한다. 1MB는 8Mb이기 때문이다.
마찬가지 이유로 1KB=8Kb이고 1GB=8Gb, 1TB=8Tb(테라비트)이다.


그외의 단위-펨토에서 페타까지

컴퓨터에서는 바이트와 헤르쯔만을 사용하므로 앞서 말한 단위만 알면 되지만 작업 내용에 따라서 그외의 여러 가지 단위가 사용되기도 한다.
먼저 10의 3제곱 단위로 사용하는 단위는 알아보면 다음과 같다. 둥근 꺾쇠 안의 첫 영문자는 표시기호다.

3제곱 단위사들
엑사(E=exa) : 100경. (10의 18제곱)
페타(P=peta) : 1천조. (10의 15제곱)
테라(T=tera) : 1조. (10의 12제곱)
기가(G=giga) : 10억. (10의 9제곱)
메가(M=mega) : 1백만. (10의 6제곱)
킬로(K=kilo) : 1천. (10의 3제곱)
밀리(mm=mili) : 1천 분의 1을 의미한다. (10의 -3제곱)
마이크로(μ=micro) : 1백만 분의 1. (10의 -6제곱)
나노(n=nano) : 10억 분의 1. (10의 -9제곱)
피코(p=pico) : 1조 분의 1. (10의 -12제곱)
펨토(f=femto) : 1천조 분의 1. (10의 -15제곱)

**표: 그외 단위사들

CUPS : 뉴런 컴퓨터의 학습단위. 초당 한 번의 학습을 수행하면 1CUPS다.
FLOPS : 대형 컴퓨터의 계산속도 단위. 초당 한 번의 부동소수점연산을 수행하면 1FLOPS다. 대형컴퓨터는 기가 플롭스 단위를 사용한다.
IPS : 대형컴퓨터의 계산속도단위. 초당 한 번의 명령을 실행하면 1IPS다.
MIPS : 대형컴퓨터의 계산속도단위. 초당 1백 만 번의 명령을 실행하면 1MIPS다.
BIPS: 대형컴퓨터의 계산속도단위. 초당 10억 번의 명령어를 실행하면 1BIPS다.
LIPS : 추론형 컴퓨터의 추론속도를 나타내는 단위. 초당 한 번 3단논법을 실행하면 1LIPS다.


** 출처 : [하드웨어 팔만대장경] 책 본 문
** 펌 : http://alzzatip.com/

Item Example Comment
IE [if IE] The only currently supported feature is the string "IE", corresponding to Internet Explorer.
value [if IE 7] An integer or floating point numeral corresponding to the version of the browser. Returns a Boolean value of true if the version number matches the browser version. For more information, see Version Vectors.
! [if !IE] The NOT operator. This is placed immediately in front of the feature, operator, or subexpression to reverse the Boolean meaning of the expression.
lt [if lt IE 5.5] The less-than operator. Returns true if the first argument is less than the second argument.
lte [if lte IE 6] The less-than or equal operator. Returns true if the first argument is less than or equal to the second argument.
gt [if gt IE 5] The greater-than operator. Returns true if the first argument is greater than the second argument.
gte [if gte IE 7]                 The greater-than or equal operator. Returns true if the first argument is greater than or equal to the second argument.
( ) [if !(IE 7)] Subexpression operators. Used in conjunction with boolean operators to create more complex expressions.
& [if (gt IE 5)&(lt IE 7)] The AND operator. Returns true if all subexpressions evaluate to true
| [if (IE 6)|(IE 7)] The OR operator. Returns true if any of the subexpressions evaluates to true.
true [if true] Always evaluates to true.
false [if false] Always evaluates to false.



사용방법 : 아래처럼 IE외 브라우저용 CSS를 사용하고 밑에 IE용 CSS를 사용..
<link rel="stylesheet" type="text/css" href="basic.css" />
<link rel="stylesheet" type="text/css" href="editor.css" />
<link rel="stylesheet" type="text/css" href="post.css" />

<!--[if IE]>
<link rel="stylesheet" type="text/css" href="basic.ie.css" />
<link rel="stylesheet" type="text/css" href="editor.ie.css" />
<link rel="stylesheet" type="text/css" href="post.ie.css" />

<![endif]-->




다른 예제들..

<!--[if IE 5]>
<p>Welcome to Internet Explorer 5.</p>
<![endif]-->



<!--[if gte IE 5]>
<SCRIPT LANGUAGE="Javascript">
alert("Congratulations! You are running Internet Explorer 5 or greater.");
</SCRIPT>
<P>Thank you for closing the message box.</P>
<![endif]-->



<![if lt IE 5]>
<p>Please upgrade to Internet Explorer version 5.</p>
<![endif]>



<!--[if !IE]>--> HTML <!--<![endif]-->



<!--[if IE 7]><!--> HTML <!--<![endif]-->



<!--[if IE 5]>
<p>Welcome to any incremental version of Internet Explorer 5!</p>
<![endif]-->



<!--[if IE 5.0]>
<p>Welcome to Internet Explorer 5.0!</p>
<![endif]-->



<!--[if IE]><p>You are using Internet Explorer.</p><![endif]-->
<![if !IE]><p>You are not using Internet Explorer.</p><![endif]>

<!--[if IE 7]><p>Welcome to Internet Explorer 7!</p><![endif]-->
<!--[if !(IE 7)]><p>You are not using version 7.</p><![endif]-->

<!--[if gte IE 7]><p>You are using IE 7 or greater.</p><![endif]-->
<!--[if (IE 5)]><p>You are using IE 5 (any version).</p><![endif]-->
<!--[if (gte IE 5.5)&(lt IE 7)]><p>You are using IE 5.5 or IE 6.</p><![endif]-->
<!--[if lt IE 5.5]><p>Please upgrade your version of Internet Explorer.</p><![endif]-->

<!--[if true]>You are using an <em>uplevel</em> browser.<![endif]-->
<![if false]>You are using a <em>downlevel</em> browser.<![endif]>

<!--[if true]><![if IE 7]><p>This nested comment is displayed in IE 7.</p><![endif]><![endif]-->


http://msdn2.microsoft.com/en-us/library/ms537512.aspx




JS에서 Conditional Comments 사용하기는 아래 링크..

ex1. var isMSIE/*@cc_on=1@*/;

ex2. var isMSIE = /*@cc_on!@*/false;


http://dean.edwards.name/weblog/2007/03/sniff/

<script language="Javascript" src="/js/jaedong.js" type="text/javascript"></script>

이렇게 페이지 위쪽(head부분)에 넣고

필요한 부분에서

<script> jaedong_say(); </script>

해보라... 김제동 어록이 랜덤으로 하나 뿌려진다.



1. 흐르는 강물을 막거나 흐름을 바꾸려 하지 말고, 자신이 바다가 되어 강물이 오기를 기다리세요.
2. 독일의 속담에 이런 것이 있습니다. 금이 아름답다는 것을 알게되면,  별이 아름답다는 것 을 잊어버린다... 여러분은 아직 금의 아름다움보다는 별의 아름다움을 즐기실 나이라고 생각합니다. 오늘의 젊음 영원히 간직하시기 바랍니다.  
3. 사랑은 택시와 같은 거죠. 함께 걸어온 길 만큼 대가를 지불해야 합니다
4. 여자는 첫사랑을 기억에 남기고 남자는 첫사랑을 가슴에 남긴다.
5. 당신이 이 세상에 세잎 클로버로 태어난 것을 더 이상 슬퍼하지 마십시오. 만약 당신이 네 잎 클로버로 이 세상에 태어났다면 이미 누군가에 손에 의해서 당신에 허리는 잘려져 나갔을 것을.. 더 이상 당신의 잎이 세잎 클로버 인 것을 슬퍼하지 마십시오. 이제 당신의 인생에서 나머지 행운의 한 잎은 제가 되어드리겠습니다.
6. 우주는 존재합니다! ...하지만 여러분들이 없는 우주는 존재하지 않습니다..  
7. 앉아있는 신사보다 서있는 농부를 생각하는 하루 되세요.
8. 싸인 해 달라는 말에) 좀 있다 오면 등에다 문신 새겨 드리겠습니다..  
9. 자신이 힘들 땐 언제나 자기 자신으로 인해 자신을 즐겨라. 이 말을 깨닫게 되면 너는 이미 힘들다는 마음을 넘어서 행복을 맞이하고 있을 것이다.  
10. 하늘에 왜 해가 떠있는지 아십니까? 하늘에 왜 별이 떠있는지 아십니까? 저도 당신을 왜 사랑하는지 잘 모르지만 당신을 사랑합니다.  
11. 이별보다 더 비참한 것은 이별마저 허락받지 못한 사랑입니다.
12. 키가 작았던 나폴레옹은 자기자신의 키를 땅으로부터 재면 다른 사람보다 훨씬 작은 키지만,  하늘에서부터 재면 자신의 키는 다른 사람보다 훨씬 높은 키 라고 말했습니다. 여러분도 희망을 가지시고 모든일에 최선을 다하세요......  
13. 도현 : 목이 참 쫄려 보이시네요.. 김제동 : 좀 그렇죠!? 코디가 미쳤나봐요...-_-;;      이세상에 모든 코디분들에게 말합니다.  멋보다는 사람 생명이 중요하다는거..ㅋㅋ  
14. (GOD 콘서트에서..) 제동 : 전 개인적으로 태우씨를 아주 좋아합니다. 내가 여자로 태어나면 태우씨와 결혼을 할껍니다. 해주실꺼죠?? (태우의 반응을 살피자..) 제동 : 그대신 이모습 그대로 태어날껍니다. ㅋㅋ
15. 한 학생 : 오빠~ 나랑 결혼해요~ 제동 : 나 같은 딸 낳아서 살 수 있겠어요!! 그건 인생을 망치는 일이에요!
16. 제가 첫번째로 싫어하는게 제 얼굴이고, 두번째가 쥐에요.  
17. 어떤 여자분이 옷을 예쁘장하게 입고 있었는데...이걸 본 제동씨 장난끼가 발동!!!) 제동 : 저~ 이 옷 어디서 구입하셨나요? (굉장히 부러운 듯 옷을 훓어보며) (이어서 자랑스레 여자분이 말하려던 찰나..) 제동 : 정말 싸고 좋은걸 구입하셨네요~ ㅋㅋㅋㅋㅋㅋ
18. 아! 이 시계는 방수군요. 대단합니다..수심 40M 까지 방수가 된다는군요. 이런 쓸데없는 기능을... 누가 수심 40M 까지 들어간답니까... 그건 미친짓이죠.
19. (도현이 좀 삐지자...) 제동 : 락커가 하루에 4번을 삐집니다~ ㅋㅋㅋㅋㅋ
20. 호프집에서 사람들이 손을 잡자) 제동 : 그래요...내가 갈 때 아주 손 잘라줄게요. 가지고 가세요.
21. 행사장에서 김제동이 가장 싫어하는 여자 스타일을 물었더니) 제동 : 깜찍하고, 이쁘고, 귀엽고, 사랑스럽고, 애교 있고, 섹시하고, 나랑 친한데...  ...나랑 사귀지 않는 여자!!
22. 남자는 술을 먹되 취하지 않고, 취하되 비틀거리지 아니하고, 비틀거리되 쓰러지지 않고, 쓰러지되 무릎꿇지 아니해야 합니다.
23. 어차피 깨진 유리조각을 다시 붙이지 못하듯이.. 첫사랑과의 추억도 붙일 수 없는 것입니다.. 사랑의 진정한 힘이라는 것은, 아픈 기억을 소중한 추억으로 만들어 준다는 것에 있는 거죠..  
24. 견디기 힘든 고통이란 것은 견딜 수 없는 고통의 반대말입니다.
25. 사랑은 '그렇기 때문에' 가 아니라, '그럼에도 불구하고' 입니다.
26. 앞에 나온 방위 학생을 보고...) 제동 : 하하. 공군은 하늘에서 죽고, 육군은 땅에서 죽고,  해군은 바다에서 죽고, 방위는 쪽팔려서 죽습니다. 켜켜켜 (웃겨서 다 뒤집어 졌음. 바로 이어서 한마디 더) 제동 : 방위는 죽지 않는다. 다만 총소리에 놀라서 기절할 뿐이다. 켜켜켜켜  
27. 요제동 : 왜 애인이 없다고 생각하세요? 인간들 : 방위 출신이라서~~ 제동 : 아니... 방위 출신이 어때서요...  잘 키운 딸하나 방위사위 왠 말인가 이런 말도 있는데...  그리고 우리 방위들은 아주 신기한 재주가 있어요.  아무리 치열한 전투가 일어나도 6시 반이 되면 언제 귀신같이 다 퇴근을 합니다.  그리고 다음날 아침 6시 반이 되면 또 총을 들고 서있어요....  
28. 신동엽·이효리 '쟁반극장'중... 이효리가 자꾸 김제동을 물먹이고 NG를 내길래...) 제동 : 시골에서 소 잡기 전에 물을 많이 먹이죠...  
29. 네잎클로버의 꽃말은 행운이죠.. 우리는 네잎 클로버를 따기 위해 수많은 세잎 클로버들을 짓밟고 있어요. 그런데 세잎 클로버의 꽃말이 무엇인지 아세요? ...행복이랍니다. 우리는 수많은 행복 속에서 행운만을 찾고 있는 것은 아닌지..
30. 남자랑 여자랑 불러내서 공개 프로프즈 시킬 때...) 제동 : 세상에 내가 믿는 유일한 신은 당신입니다..  
31. 어두운 밤에 등대는 되어드릴 수 없습니다. 하지만, 갈 수 있는 길은 알려드릴 수 있습니다.  
32. 사랑은... ..기댈 곳을 찾는 것이 아니라 기대어 줄 곳을 만들어 주는 것.
33. 헤어진 여자친구 잡지 마세요.. 가는 사람 잡지 마세요.. 인연이라면 언젠가 강물이 되어 돌아올테니까, 바다가 되어서 기다리세요..  
34. 나는 당신을 사랑하기 때문에 사랑하는 것이 아니라 사랑할 수 밖에 없기 때문에 사랑하는 것입니다..  
35. 제동님이 잘생긴 사람들에게 한마디!!^-^) 내가 있기에 느그들이 있다. 잘생긴 남자를 좋아하시는 여자분들에게 고합니다. 훗~ 외모는 중요치 않습니다. 세상에 모든 잘생긴 것들에게 고합니다. 못생긴 사람들이 없었으면, 잘생긴 사람이란 단어 자체가 세상에 나오지 못합니다. 반말이라고 기분 나쁘게 생각하지 말고 들어, 내가 없으면 너희도 없어~
36. 이 세상에 반대가 없는 두 단어는 우주와 사랑입니다.. 우주는 끝이 없는 것입니다.. 하지만..끝이 없는 것조차도.. 우주안에 포함되어 있는 겁니다.. 그리고 사랑의 반대가 미움이나 증오라고 생각하는 사람이 있지만.. 미움과 증오도 사랑에서 파생된 단어에 불과합니다.. 사랑과 우주의 공통점은.. ..그 속에서는 우주나 사랑을 바라 볼 수 없는 것입니다..  
37. (2시의 데이트 중...) 나는 억겁의 세월을 당신을 향해 밀려들지만 당신의 발끝만 적시고 돌아섭니다. (파도라는 시를 인용하고 나서....) 파도가 계속 육지로 억겁의 세월 밀려들지만 결국 육지의 발끝만 적시고 돌아서면 또 오고 돌아서며 또 오고 돌아서는 것이 어쩜 이것이 사랑일줄 모르겠어요. 이것이 해일이나 폭풍이 되어 육지를 집어 삼기면 파괴가 되고 서로 서로 약간 적시며 평생을 동반자로 살아가는 것이 아기자기한 사랑인지도 모르겠네요...
38. 사랑이 아름다운 이유는... ...기억을 추억으로 만들어 준다는 것입니다..  
39. 김제동의 '이별 극복법' 중...) 그 사람 생각이나서 괴로우면 애써 참지말고 술을 마시고 싶으면 술을 마시고.. 그렇게 한병을 먹으면 술잔에 그 사람 얼굴이 이렇게- 어릴거예요.. 그럼 그걸 마시고.. 집에 가서 아침에 일어나서 하루 한갑피던 담배 다섯갑씩 피우고 그러면 알라딘의 램프에서 나오는 연기처럼 그 사람 얼굴이 삭 피어오를겁니다.. 그렇게 해서라도 잊을수 있으면 그렇게 하시란 얘기죠.. 괜히 그 사람 집앞에 가서 술 마시고 술병 던지고 그러지 말고 자기집에 와서 술마시고 술병 창문에 던지세요.. 그럼 다음날 아침에 일어나서 그 깨진 창문조각과 술병을 치웁니다. ...이미 그 사랑은 여러분이 던진 술병에 깨진 유리창처럼 다시는 붙일 수 없다는 것을 아셔야 합니다...
40. 소크라테스가 그랬죠.. 이별의 아픔도 사랑해본 자 만의 특권이다. 이별을 두려워 하지 말고 즐기자..
41. 여러분, 사랑하는 사람 생기시면 그 사람이 해달라는 것 다~ 해주세요. 그래야 나중에 여운이 안 남습니다. 저는 제가 4년동안 사귄 첫사랑이 해달라는 거 다해줬는데, 딱 한가지를 못해줬어요. 놀이기구 같이 타자고 했는데, 저는 원래 놀이기구 타는거 엄청 무서워하거든요. 그렇게 무서운 걸 왜 돈내고 줄서서 기다려서 타는지 모르겠어요. 그래서 여자친구 혼자 태웠어요. 나중에 헤어지고 나서 저혼자 놀이기구를 타러 갔습니다. 결국 마무리는 타고 내려오면서 그런 생각을 했죠. 죽어도 다신 타지 말아야지.ㅋㅋ
42. 제 개인적인 생각에는.. 첫사랑의 기준이란 잘은 모르지만... 생각했을때 되게 기분이 좋고 자꾸 생각해내고 싶으면 그건 첫사랑이 아니지 않나 싶습니다...  
43. 첫사랑이란 기억하고 싶지 않은데도 자꾸만 후벼파고 가슴속에 들어오는게 아닌가 싶습니다.. 기억하고 싶지 않은데 자꾸 생각 나는게 첫사랑인것 같습니다... 기억나는게 아니고 가슴 속 밑에서 차오르는 것... 그리고 제 생각에 첫사랑이 아름다울 수 있는 이유는... ...이루어지지 않았기 때문이 아닐까 싶습니다...
44. 500일 사귄 여자는 적금통장이고, 지금 만난 여자는 주식이다. 고로, 적금통장은 안전하지만, 주식은 날리면 그만이다.
45. 남자는 여자에게 모든 것을 바치라고 요구한다. 그러나 여자가 모든 것을 받쳐서 헌신하면 남자는 또 다시 그 무게에 부담스러워 한다.                                  - 시몬느 보부아르
46. 가장 낮은 사랑이, 가장 깊은 사랑일 수도 있다. 물은 높은 곳에서 낮은 곳으로 흐르기 때문에 바다를 이룰 수 있다.
47. 1. 날 버리고 간 사람에게 복수하지말고, 후회하게 해라 2. 언젠가는 날 떠난 걸 후회할 날이 있을 것이다. 3. 스토킹은 날 위해 그 사람의 앞모습을 잡아두는 것이고,  사랑은 그 사람을 위해 그 사람의 뒷모습을 바라 봐 주는 것이다.
48. 어떤 커플이 이 세상에서 만나서 사랑을 하게 될 확률은 얼마나 될까요?? 간단하게 생각하면 할 확률 안 할 확률 반반이죠... 그 치만 따져보면, 내가 남자로 태어나고 그녀가 여자로 태어날 확률 1/2, 이 세상의 수많은 국가 약 200개국 중에 대한민국에서 태어날 확률 1/200, 대한민국에서도 같은 지역에서 태어날 확률 우리나라의 수많은 지역을 약 1000개의 시도, 군, 읍, 면이라 해도 1/1000 그리고 같은 시간대에 있을 확률... 시간을 숫자로 환산하면 약1/1000000000000000000000000................... 즉, 앞으로 아무리 좋은 성능의 컴퓨터가 나와도 이 확률을 계산할 수는 없습니다... 즉. 어떤 커플이 이렇게 만나게 된 것은 인연이 아닙니다....인연이라고 할 수 없습니다.... ...그것은 기적입니다......  
49. (대학교 축제 중...) 천문학자가 별을 보는데 천년에 한번씩 두개의 별들이 사라진데요. 이 두 별은 다시는 찾을 수 없는데, 이 별들이 땅에 내려와 사랑하는 두 사람의 눈빛이 된답니다.
50. 플라톤이 했던 얘깁니다.. 사랑이란 건 인간이 얼마나 행복한 것인가 보여주기 위해 신이 만든 것이 아니라 인간이 고통과 어려움 속에서 얼마나 잘 해쳐 나갈 수 있는가를 보여주기 위한 신의 시험표이다.  
51. 사랑했다면 앞을 보고 사랑할거면 서로를 보고 사랑한다면 같은 곳을 보라.
52. 왕비가 백설공주를 미워한 이유는, 백설공주가 예뻐서가 아니라.. ...거울에 대한 배신감 때문이다..  
53. 평생 모든 사람을 좋아하고 한 사람만을 사랑하면서 살아가다 눈감을 수 있다면, 그것이 가장 행복한 삶이다.
54. 솔직함이라는 것은, 사랑만 놓고 봤을 때에는 전 세계에서 유일한 종교다  
55. 악어는 음식을 먹을 때 눈물을 흘린다고 합니다.. 자신의 먹이가 된 동물의 죽음을 슬퍼해서 그럴까요? 그게 아니라.. 악어는 눈물샘의 신경과, 입을 움직이는 신경이 같기 때문이래요.. 악어는 음식물을 씹을 때 눈물샘이 자극이 된다네요.. 위선적인 눈물을 그래서 크로커 다일 티얼즈(crocodile tears) 라고 부른데요..  
56. 따뜻한 차 한 잔, 전화 한 통화, 편지 한 통... 작은 선물 하나가 서로의 열쇠를 빛나게 해 줍니다. 시간과 물질을 나눌수록, 마음과 사랑을 더 많이 주고받을수록, 그 열쇠는 더욱 빛이 납니다. 서로서로 잘 쓰여지고 있기 때문입니다.  
57. 신이 하신 가장 커다란 실수는 남자와 여자를 만든 것이다. 남자와 여자가 없었다면 이 세상에 전쟁이란 일어나지 않았을 것이다.  
58. 어떤 여자가 군대 간 남자친구를 기다리기가 막막하다 라고 말을 하자) 남자친구를 기다린다고 생각하지말고, 자랑스러운 남자친구를 내 조국에 임대해주었다고 생각하고, 나도 같이 나라를 지킨다고 생각을 하면 기다리는 게 아니라 함께하는 것 이 될 수 있다.  
59. 진정으로 사랑한다는 것은.. 내 안에서 자유롭게 뛰어 놀 수 있도록 나 자신을 넓혀나가는 것이다. 새장에 새를 가둬두는 것이 아니라 어디든 자유롭게 날 수 있게 만들고 그 모습을 바라보는 것이 새를 사랑하는 것이듯...  
60. 새벽에 아무리 장난전화가 많이 와도 '혹시나...'하는 마음에 꼬박꼬박 다 받습니다. 그래서 새벽에 잠을 제대로 못 잡니다 ...는 말을 듣고 좀 마음이 아팠습니다...  
61. 영원히 살 것처럼 꿈을 꾸고, 내일 죽을 것처럼 오늘을 살아라.  
62. 매일 맑은 날만 계속된다면 이 세상은 사막이 되었을 것이다.
63. 사랑은 바람과 같아서 비록 볼 순 없으나 느낄순 있다.  
64. 자신의 단점을 깊숙이 숨겨두지 말고 햇볕을 쏘이게 하라. 그래야 그 단점이 광합성을 하여 꽃을 피울 수 있다.  
65. 어떤 남자가 맘에 드는 여자가 있는데 사귀자는 말이 안 나온다고 말하자) 맘에 드는 여자가 있어도 사귀자고 말을 못하시겠다구요? 그럼 다 하신 거네요. 이 한마디만 더 하시면 됩니다. 나는 사랑하는 여자가 생겨도 사귀자고 못해. 그런데 난 지금 너한테 그 말을 못하겠어. ..진실은 세상 어디에서나 통합니다.
66. 백조라는 것은 언젠간 호수를 박차고 날아오르는 새
67. 모든 인간이 자신이 불행하다고 생각하는 단점도 다 신의 창조계획과 의지가 담겨져 있는 것이다. 히말라야 산 봉우리에 작은 풀 한 포기에 맺혀있는 이슬 한 방울에도 신의 창조계획과 의지가 들어 있다.
68. 미국의 한 보험회사에서 가장 판매율이 좋은 사람은 다름 아닌 말을 더듬는 사람이었다. 이 사람은 처음부터 자신이 말을 더듬는다고 고객들에게 말을 했으며 이 말을 한 이후부터 그렇게 편안할 수가 없었다고 한다. 자신은 편하게 말할 수 있어 좋았고, 고객들은 그 사람의 말에 더 집중하게 되어 성공할 수 있는 기반이 되었다는 것이다..  
69. 세상에서 최고로 느낄 수 있는 기쁨은 체념 할 때이다.  
70. 운명은 우연을 가장해서 찾아온다  
71. 세상에서 가장 장엄한 광경은 불리한 역경과 싸우고 있는 인간의 모습이다
72. 과거와 현실을 버리고 미래를 받아들여라.  
73. 이륙 할 수 없는 꿈을 꾸고 ,이루어질 수 없는 사랑을 하고, 견딜 수 없는 고통을 견디며, 잡을 수 없는 저 밤하늘에 별을 따자.                            - 세르반테스의 돈키호테
74. 하늘에 계신 분에게 통하는 유일한 길은 기도이고, 사람에게 통할 수 있는 유일한 길은 진실이다.  
75. 점술이라는 것은 열 개의 운명 중에 하나의 운명을 우리에게 예시하고 암시해주는 것이고 우리가 가진 능력이라는 것은, 아홉 개의 앞으로의 일어 날 예언 어떤 것들도 우리가 만들어 나갈 수 있다는 것이다.  
76. 희망이란 있다고 할 수도 없고 없다고 할 수도 없다. 그것은 땅위의 길과 같은 것이다. 원래 땅 위에는 길이 없었다. 걸어가는 사람이 많아지면 그것이 곧 길이 되는 것이다.
77. 함께 있다는 것이 힘이 될때는 기쁠 때가 아니라, 힘들고 어려울 때일 거라고 생각합니다.
78. 오늘 비가 오지 않습니까? 이런 날은 세상에 있는 모든 짝사랑하는 사람들이 사랑하는 사람에게 하지 못했던 말, 하고 싶었는데 그냥 하지 못하고 돌아서서 내쉰 한숨에 섞인 것들이 하늘로 올라가 비가 되어 내리는 것이랍니다
79. 제 가슴속에 이거 하나 있는 걸 터뜨리면 소주로 밖에 채울 것이 없습니다.  
80. SBS TV 야심만만에서.. 주제가 '헤어진 이성으로부터 청첩장을 받았다면' 인데...) 제동 : 아, 저도 그런적이 있었어요 호동 : 그래서요? 제동 : 열받아서 한강가서 술먹다가 신랑이름 적힌거 칼로 긁어서 없애고  거기다가 제 이름 새겼어요.
81. 우리가 영어를 배우는 이유는, 우리의 다음 세대에서는 코쟁이들이 우리의 훈민정음을 배우게 하기 위해서 입니다.  
82. 운명이란 보여지는 외형이 아니라 결국은 운명적인 사랑.. 언젠간 눈으로 보이는 모습으로 만나는 것이 아닌 가슴으로 만나는 사람이 나타날 것이다.. ..신은 그렇게 만들어 놓았다...  
83. 희망이란 있다고 할 수도 없고 없다고 할 수도 없다. 그것은 땅위의 길과 같은 것이다. 원래 땅 위에는 길이 없었다. 걸어가는 사람이 많아지면 그것이 곧 길이 되는 것이다.
84. 이소라의 음도에서, 소라 : 어머, 제동씨 얼굴이 많이 부었어요. 많이 아프나 봐요. 이젠 제동씨도 안정된 가정을 가지셔야 할 텐데요. ㅉㅉㅉ 제동 : 네, 그래야죠, 그래야죠. 근데, 이소라씨 저보다 누나시죠?? ㅋㅋ
85. '자신이 힘들 땐 언제나 자기 자신으로 인해 자신을 즐겨라.' 이 말을 깨닿게 되면, 너는 힘들다는 마음을 이미 넘어서 행복을 맞이 하고 있을 것이다.
86. 사랑한다의 반댓말은 사랑안한다가 아니고 사랑했었다입니다.
87. 나를 슬프게 하는것은 나를 사랑하지않는 당신도, 내곁에 다가올수 없는당신도 아닙니다. 나를 가장 슬프게 하는것은 나로인해 힘들어 하는 당신입니다.
88. 요즘 사람들은 말이죠 다른 사람들은 신경도 안써요 그 사람들이 나에게 어떤 인연이 될지도 모르는데 말이죠.
89. 그 사막에서 그는 너무나 외로워 때로는 뒷걸음질로 걸었다. 자기 앞에 찍힌 발자국을 보려고...
90. 세상에서 가장 미련한 것은 사랑을 알아채지 못하는 것이고 가장 슬픈것은 사랑을 해보지 못한것이고 그리고 가장 불행한 것은 사랑을 이해하지 못한것이다. 어긋난 사랑때문에 가슴 아파하시는 여러분! 사랑을 못해 본 사람보다 더 행복하다는거 잊지 마시길 바랍니다
91. 여자의 모성본능은 어머니한테서 물려받을까요, 아버지한테서 물려받을까요? 놀랍게도 딸의 모성본능에 절대적인 영향을 미치는건 아버지의 유전자라고 합니다. ‘펙 3’라는 아버지의 유전자가 없다면 딸은 자식에 대한 애정을 전혀 가질수 없답니다. 자식에 대한 절대적인 사랑, 모성본능!!! 그것은 결국 어머니와 아버지가 함께 만들어내는 고귀한 마음, 위대한 본능입니다
92. 사랑이란 자기희생이다. 이것은 우연에 의존하지 않는 유일한 행복이다. - 톨스토이
93. 구해서 얻은 사랑은 좋은 것이다. 그러나 구하지 않고 얻은 것은 더욱 좋다. - 셰익스피어  
94. 연애란 남자가 단 한 사람의 여자에 만족하기 위해 치루는 노력이다. - 풀 제라르디  
95. 사랑하는 것이 인생이다. 기쁨이 있는 곳에 사람과 사람 사이의 결합이 있는 곳에 또한 기쁨이 있다. - 괴테  
96. 증오가 섞인 사랑은 사랑보다 강하고 증오보다 강하다. - Joyce C. Oates (미국 작가)
97. 사랑은 홍역과 같다.우리 모두가 한번은 겪고 지나간다. - Jeromek. Jerome (영국수필가 , 극작가)
98. 죽음보다 더 강한것은 이성이 아니라, 사랑이다. - Thomas Mann (독일 작가)
99. 사랑은 성장이 멈출때만 죽는다. - Pearl S. Buck (미국 작가)
100. 사랑은 삶의 최대 청량, 강장제이다. - Pablo Picasso (스페인 화가)
101. 사랑은 악마이며 불이며 천국이며 지옥이다. 쾌락과 고통, 슬픔과 후회가 거기에 함께 살고 있다. - 반필드
102. 사랑하지 말아야 되겠다고 하지만 뜻대로 안 된 것과 같이 영원히 사랑하려고 해도 뜻대로 되지 않는다. - J.라브뤼이엘
103. 사랑의 고뇌처럼 달콤한 것이 없고 사랑의 슬픔처럼 즐거움은 없으며, 사랑의 괴로움처럼 기쁨은 없다. 사랑에 죽는 것처럼 행복은 없다. - E.M.아른트
104. 사랑은 인간생활의 최후의 진리이며 최후의 본질이다. - 슈와프
105. 사랑은 화관에 머무는 이슬방울같이 청순한 얼의 그윽한 곳에 머문다. - F.R.라므네  
106. -우리는 꿈속에서 길을 잃은 것이 아니다. 다만, 길을 잃은 꿈을 꾸었을 뿐이다.-
107. 고민이란 반드시 극복할 수 있는 미래이다... 날마다 맑으면 사막이 된다... 비바람도 치고 해야 새싹도 돋아날 수 있는 것이다...  
108. 10대는 거울처럼 삽니다. 한없이 비춰보고 20대는 깨뜨리려고 합니다.. 여기저기 튀어나가고.. 30대..스스로의 한계도 인정해야 되고 주변에 일어나는 일들도 뭐 그렇게 재미있거나 신기하거나 그렇지도 못합니다.
109. 사람과의 만남에 대해... 우리는 외짝 날개를 가지고 태어난 사람이다. 서로 부둥켜 안고 살아야 한다.
110. 사랑은 기대는것이 아니라 기대어 줄 곳을 만들어 주는겁니다.
111. 그냥친구와 진짜친구의 차이 그냥친구는 당신이 우는걸 본적이없습니다. 하지만 진짜친구는 이미 어깨가 당신의 눈물로 적셔져있지요.. 그냥친구는 당신 부모님의 성함을 모릅니다. 하지만 진짜친구는 주소록에 당신 부모님의 전화번호까지 가지고있지요. 그냥친구는 당신이 파티를 열때 와인한병을 사가지고 옵니다. 하지만 진짜친구는 당신이, 파티를 열때, 빨리와서 준비를 도와주고, 파티가 끝나면 치우는거 도와주느라 집에 늦게들어가지요. 그냥친구는 당신이 밤늦게, 자기가 다 잠들어있을때 전화하면.. 싫어하면서 짜증을 냅니다. 하지만 진짜친구는 짜증은 커녕 전화하는데 왜이렇게 오래걸렸냐고 묻지요! 그냥친구는 당신의 문제들에대해서 얘기하고자합니다. 하지만 진짜친구는 당신의 문제들에대해서 도와주고자하지요! 그냥친구는 당신과 실랑이를 벌였을때.. 우정은 끝났다고 생각합니다. 하지만 진짜친구는 나중에 전화를해서 먼저 사과를 하지요. 그냥친구는 항상 당신이 자신옆에 있어주길바랍니다. 하지만 진짜친구는 자신이 당신옆에 있어주기를바라지요! [좋은글 中에서]
112. 눈으론 진정한 사랑을 알아볼수없다. 그러나 가슴은 알아볼수있다.
113. 우정은 종종 사랑으로 끝을 맺기도 하지만, 사랑은 결코 우정으로 바뀔 수 없다. 우정이란 두 사람 속에 있는 하나의 마음이다. 교태가 참된 사랑에 의해 무너지듯이 질투는 참된 우정에 의해 무너진다. 황금은 불로 시험하고, 우정은 곤경이 시험한다. 세월은 우정을 돈독하게 하고 사랑을 엷게 한다. 가장 친한 친구라 할지라도 자신의 생각을 전부 말해 버리면 평생토록 적이 될 수 있다. - 사를르 뒤클로
114. 자신의 친구를 대신하여 인내하며 고통받기를 회피해서는 안된다. -에드워즈
115. 세상에는 세 가지 타입의 친구가 있다. 너를 사랑하는 친구, 너를 잊어버리는 친구,너를 미워하는 친구가 그것이다. -장 파울
116. 가장 좋은 거울은 오래 사귄 친구이다. -G.허버트
117. 세상에는 기묘한 우정이 존재한다. 서로 잡아먹을 것처럼 하면서도 헤어지지도 못하며 일생을 그대로 지내는 인간도 있다. -도스토예프스키
118. 교태가 참된 사랑에 의해 무너지듯이 질투는 참된 우정에 의해 무너진다. -라 로슈프코
119. 시간은 우정을 깊게 하고, 연애를 약화시킨다. -라 브뤼에르
120. 좋은 친구와 좋은 책, 그리고 살아있는 양심이야말로 가장 이상적인 생활이다. 최고의 친구는 당신이 자신에 대한 사랑을 잊고 있을 때, 당신을 사랑해 주는 사람이다. 친구가 없는 사람은 행복할 수 없다. 또한 자신이 불행한 처지에 빠지기 전까지는 친구의 진가를 확실히 알 수 없는 것이다. 때론 그저 말없이 함께 있어주는 친구가 장황한 충고 보다 더 큰 위로가 된다. 도덕은 당신의 친구들을 싱긋 웃게 해 주지만 부도덕은 그들을 찌푸리게 만든다
121. 아내를 선택할 때는 수준을 한 단계 내리고. 친구를 선택할 때는 수준을 한 단계 높여라. 친구가 화났을 때 달래려고 하지 말고 슬픔에 잠겼을 때는 위로하려 하지 말라. 만약 친구가 채소를 가지고 있다면 고기를 전해 주라. 친구가 당신에게 꿀같이 달콤하더라도 그것을 전부 빨아먹지 말라.
122. 붉은 단풍처럼 사랑하다가... 말없는 낙엽처럼 보내야 한다.....
123. 신이 하신 가장 커다란 실수는 남자와 여자를 만든 것이다. 남자와 여자가 없었다면 이 세상에 전쟁이란 일어나지 않았을 것이다. 이렇게 힘들게 사랑 할 바에야 차라리 다음 생애는 미토콘드리아로 태어나자
124. 이별하는 사람들이여 기뻐하라 이별이라는 것은 사랑했던 사람들만의 특권이다.
125. 희망이란 있다고 할 수도 없고 없다고 할 수도 없다. 그것은 땅위의 길과 같은 것이다. 원래 땅 위에는 길이 없었다. 걸어가는 사람이 많아지면 그것이 곧 길이 되는 것이다.
126. 세상에서 가장 소중한사람은 세상끝날까지 나와 함께 있어줄 내옆에사람입니다.
127. 사람이 만든 책보다 책이 만든 사람이 더 많습니다.
128. 하늘의 별만을 바라보는사람은,자기 발 아래의 아름다운 꽃을 느끼지 못한다
129. 남여공학에서 쥐나오면 남자들은 무서워도 잡으러 다니고, 여자들은 전부 책상위에 올라가고, 여고에서 쥐나오면, 키우고 있어요.. 죽지마.. 죽지마.. 이러면서 먹이 넣어주고..
130. 사랑을 왜 나를이라는 잣대로 보는게 아니라 나이기 때문에라는 잣대로 보라.
131. 태어날 땐 다른 장소에서 태어났지만 이젠 같은 장소에 있을 것이고 태어날 땐 다른 하늘을 보고 태어났지만 앞으로는 같은 하늘을 보게 될 것이고 태어날 땐 서로를 모르고 태어났지만 앞으로는 서로를 알아가며 살게 될 것입니다
132. 하늘은 돈으로 살 수 있지만 꿈은 돈으로 살 수 없고 땅은 돈으로 살 수 있지만 농부의 땀은 돈으로 살 수 없고 사람은 돈으로 살 수 있지만 친구는 돈으로 살 수 없다
133. 영원히 살 것 처럼 꿈을 꾸고, 내일 죽을 것 처럼 오늘을 살아라
134. 바남자는 여자에게 모든 것을 바치라고 요구한다. 그러나 여자가 모든 것을 받쳐서 헌신하면 남자는 또 다시 그 무게에 부담스러워 한다.
135. 가장 낮은 사랑이, 가장 깊은 사랑일 수도 있다. 물은 높은 곳에서 낮은 곳으로 흐르기때문에 바다를 이룰 수 있다.
136. 이세상에 반대가 없는 두단어는 우주와 사랑입니다.. 우주는 끝이 없는 것입니다..하지만.. 끝이 없는것 조차도 우주안에 포함되어 있는겁니다.. 그리고 사랑의 반대가 미움이라고 생각하는 사람이 있지만 미움도 사랑에서 파생된 단어에 불과합니다. 사랑과 우주의 공통점은..그 속에서는 우주나 사랑을 바라볼수 없는 것입니다..
137. 여자의 눈물은 몸속에 물이 빠져나오는것이지만.. 남자의 눈물은 심장속의 피가 빠져나오는 것이다.그걸 치유해줄수 있는 사람은 사랑하는 여자뿐이다.
138. 언젠가 캘리 포니아 선박이 난파했을때 그 선박에 있던 승객 가운데 한광부가 금괴 2백 파운드를 넣은 띠를 두른채 해저에 가라 앉아 죽어 있는 것이 발견 되었다.그렇다면 그가 그 금을 가지고 있었던가? 아니면 금이 그를 가지고 있었던 것인가?  
139. 천문학자가 별을 보는데 천년에 한번씩 두개의 별들이 사라진데요 . 이 두 별은 다시는 찾을 수 없는데 이 별들이 땅에 내려와 사랑하는 두 사람의 눈빛이 된답니다. 천년에 한번 떨어진 별빛으로 사랑하는 여러분 정말 많이많이 아껴주고 사랑하세요  
140. 사랑이란 말 달리는 것과 같아서.. 한다리가 나아갈때 다른 한다리는 뒤에서 받쳐줘야 한다
141. 당신이 헛되이 보낸 오늘은 어제 죽은 사람이 간절히도 바라던 내일이다...
142. 오늘을 붙들어라. 되도록 내일에 의존하지 말라. 그날 그날이 일년 중에서 최선의 날이다. ㅡ에머슨
143. 칭찬을 받을 때마다 메모지에 적어 보십시오 그리고 그날 저녁 메모한 노트를 펴 보십시오 당신은 정말로 좋은 사람입니다
144. 말을 하는 혀 속에 심장을 담을 수 있다는 것을 반드시 보여드리겠습니다...
145. 술취해서 전화건 사람이 다 사랑하는 남자에게 전화하는 건 아닙니다. 그 사람을 만나서 편한함을 느끼고 기댈수 있지만 그사람에게 안정을 찾고는 그 여잔 사랑하는 사람에게 전화해서 만나러 가는 사람들도 있다고.... 여자는 기댈남자와 사랑할 남자가 따로있다고....
146. 서울여대 강의중 어떤분이 첫사랑을 아직도 사랑하세요? 라고 물었어요.. 그런데 너무나도 진지하고 당연하게.. 네.. 사랑합니다.. 하시는 거예요~ 와~~~~~우~~~~ 이런 저희의 반응에 웃으시면서  제가 지금 첫사랑을 사랑한다는 건 그립다는 거예요~ 그 때의 그 여자가 그리운게 아니고 그 때의 우리가 그리운 거지요...
147. 사랑은.. 넘어졌을때 일으켜 주는것이 아니라.. 같이 넘어져 주는 것이다.
148. DJ-DOC의 김창렬씨 결혼식장에서.. 다른 하늘을 보고 태어났으나.. 한 하늘을 보고 살것이고.. 다른 시간에 태어났으나.. 같은 시간안에 살것이며.. 다른 곳에서 태어났으나.. 한곳에서 살것이고.. 두 부모를 섬기고 살아왔으나.. 한 부모를 섬기고 살 것입니다..  
149. 눈물로 그리움을 지우려고 하지 마세요.. 안지워집니다.... 오히려 슬픔이 더 번져버린답니다...
150. 당신이 나에게 하는 모든 말을 참을 수 있습니다. 가슴에 못이 박히도록 아픈 모진말도 참을 수 있고 내가 싫다고 하는 말도 참을 수 있습니다. 그런데 한가지 참을 수 없는 말이 있습니다. 그건 바로 저로 인해서 당신이 힘들다는 말입니다.
151. 팔이 안으로 굽는다고 해서 뒷사람을 안을 수 없는 것은 아닙니다. 내가 뒤돌아 서면 되지 않습니까....
152. 남을 손가락질하는 한손이외의 나머지..세 손가락은.. 나 자신을 향하고 있다...
153. 별하고 첫사랑은 멀리 있을수록 아름답습니다... 별도 갈 수 없을 만큼 멀리 있어야 아름답고.... 첫사랑도 이루어질 수 없어야 더 아름답다... 별과 첫사랑이 가까이 있으면 그것이 아름다운지 모른다고....  
154. 세상에서 돌이킬수 없는것 3가지 흐르는강물... 지나간 시간... 떠나간 마음...
155. 머리속에서 기억해서 밑으로 내뱉는 말보다는 가슴속에 새겨서 밑에서부터 차서 오르는 말을 하면서 살도록 하겠습니다...
156. 만약 내가 알파벳을 다시 만든다면... 당신(U)과 나(I)를 함께 놓겠어요.
157. 사랑은 기척처럼 아름다운 여정이며 용기 있는 모험입니다.
158. 사랑은 늘곁에 잇어 아름다운것이 아니라 서로에 마음속에 있어 아름다운것입니다
159. 남의 가슴에 총알을 쏠때 내등에는 미사일이 날아올때가 있다...
160. 태어나는 기적을 이미 가졌으니..세상에서 행복할 권리도... 틀림없이..우리안에..숨어있을겁니다...이번한주...그걸 찾는... 우리모두가 됩시다....
161. 높이 떠있는 해보다 지는 노을이 더 아름다운 것은 한낮내내 수고하고 돌아서는 그 뒷모습을 모든사람들이 존경하고 아쉬워하기 때문일 겁니다...서로서로에게 잊혀지지 않는 긴여운을 남겨주는.. 우리가 되었음 합니다...
162. 땅이 있어서 나무가 있듯이 여러분들이 계셔서 제가 있다는 것을 결코 잊지 않겠습니다..... 그리고 반드시 제가 없어지면 여러분들의 나무를 위해서 제가 땅이 되어 드리겠습니다...
163. 자신을 다 공개하면 사랑이 아닙니다... 사랑하는 마음이 드러나지 않아야 사랑이지요...
164. 눈에 보이지는 않으나, 언젠가 마주칠 거라고 믿고 걸어갈 수 있는 길이라면,그리 힘들진 않을 거라고 생각합니다....
165. 새로운 것이 놀라운 것은 그 안에 옛 것의 추억을 담고 있기 때문이고, 옛 것이 아름다운 것은 새로운 것으로 나아갈 수 있는 가능성과 힘을 가지고 있기 때문일 겁니다.
166. 살다보면 나락에 떨어질때가 있지요 그럴땐 올라가는 것 밖에 방법이 없지요... 떨어질때는 말이예요.. 멋찌게 떨어지는거예요~ 실패하는것이 아니라 더많은 희망을 가지면서..
167. 좋아하는 사람 이름은 수첩 맨 앞에 적지만 사랑하는 사람 이름은 가슴속 깊은 곳에 새기는겁니다. 좋아하는 사람은 그에 대해 아는것이 많지만 사랑하는 사람은 그에 대해 알고싶은게 많은 것입니다. 좋아하는 사람은 눈을 크게 뜨고 보고 싶은 사람이지만 사랑하는 사람은 눈을 감야야 볼수 있는 사람입니다.
168. 근데 말이죠 참이상하게 그렇습니다. 처음에는 그사람이 생각나서 술을 마셨는데 이제는 술만마시면 그사람이 생각나서 문젭니다.
169. 사랑은 집착이다.. 그러나 사랑보다 무서운것은 무관심이다..
170. 인간은 패배했을 때 끝나는 것이 아니다. 포기 했을 때 끝나는 것이다
171. - 꿈을 꽉 붙들어라. 스스로 의심하여 그 꿈이 사라지게 하지 말라.-
172. 사랑의 하트는 반으로 갈라졌을 때는 단순한 도형에 불과합니다. 그러나 , 그게 합쳐졌을 때는 그 누구도 반대할 수 없는 크고 온전한 하나의 우주가 됩니다... 사랑의 힘으로 말입니다.... 아마 지구의 반지름을 계산할 수 있는 과학자는 나왔지만 , 결코 세상 모든 사람들이 하는 사랑의 하트 반지름을 계산 할 수 있는 사람은 결코 나오지 않을 걸로 생각합니다.오로지 사랑하는 , 그 하트를 만든 사람만이 그 사랑의 크기와 무게를 알 거니까...
173. 먼곳으로 항해하는 배가 풍파를 만나지 않고 조용히 갈 수만은 없다. 풍파는 언제나 전진하는 자의 벗이다. 차라리 고난 속에 인생의 기쁨이 있다. 풍파없는 항해.. 얼마나 단조롭겠는가.. 고난이 심할 수록 내 가슴은 뛴다.- 니체. 우리가 사는 길에 풍파를 만날 때마다 서로가 옆에 있다는 것만으로 고난을 기쁨으로 여기게 하는 , 서로가 서로에게 그럼 마음으로 한결같이 고난마저도 기쁨으로 함께 나눌 줄 아는 우리가 되었으면 합니다...^^
174. 인생의 전환점에 서서 너무아둥바둥 달려왔으니까 한번쯤 내가 살아온 세월과 그리고 내가 살아갈 세월의 중간점에서 마라톤으로 치면 반환점에서 물을 적시는 마라톤선수의 마음처럼 돌아온 길을 돌아볼 수도 있고 나아갈 길을 설계할 수도 있는 인생에 있어서 정말 초석같은 시간이 아닌가 그런 생각이 듭니다  
175. 인간에게 고통이 없다면... 생선이 소금에 절임을 당하고 얼음에 냉장을 당하는 고통 없이 썩는 길밖에 없다.
176. 사랑..추억..그리고...그리움... 철없던 시절 사랑을 하게 되서 시간이 지난후 철이 들고 철없던 시절의 사랑을 잊어야할땐..너무 힘듭니다... 힘들고 외롭고 지칠때 제일 먼저 생각나는 사람...그사람품에서 어리광과 서글펐던일들을 모두다 털어놓고 싶을때...하지만 그렇게 할수 없을때...정말 너무도 힘든거 같습니다 짧은인생...조금더 빨리 인연을 만났으면 좋겠다고들 하지만 그 인연을 만나지 전에 가슴속에 품어 두었던 옛사랑...그사랑을 잊어야 다른 사랑을 할수 있을거 같습니다... 너무아픈 사랑은 사랑이 아니었음을 이라는 노래제목 처럼 다신 너무아픈사랑은 현실보다는 꿈에서 행했으면 좋겠습니다..꿈이라도 충분히 맘이 아프니까... 여러분!!평생 행복하게 살아도 짧은 인생...지금부터라도 행복하고 즐겁게 삽시다!!
177. 지나간 사랑 때문에 가슴아파 하는 이유는 사랑한 기억과 어떻게 사랑하게 됐는지를 기억하지만 헤어진 이유는 기억나지 않기 때문입니다.
178. 내가 더 사랑한다고 느낄때, 난 외로움을 느낀다.  
179. 사흘 뒤에 내 인생이 끝난다면 뭘 하고 싶으세요? 세 가지 정도만 하라 그러면요.. 들으시는 분들도 한 세 가지 생각하셨으면 그걸 지금 하시기 바랍니다. 그게 제일 중요한 거 같습니다. 사랑도 그런 것 같습니다. 이렇게 내가 해야지 생각하면 지금 그걸 하시기 바랍니다.
180. 잊고 싶다고 잊을 수 있고 멈추고 싶다고 멈출 수 있었다면 사랑에 아파 할 사람도 없고 사랑 때문에 눈물 흘릴 이유도 없을 것이다.
181. 세상에서 가장 긴 거리가 어딘 줄 아십니까? 바로 머리부터 가슴 까지 랍니다.머리로 생각하는 건 가슴에 닿질 않고, 뜨거운 가슴이 하려고 하는 건 차가운 이성의 머리가 막으니까요.  
182. 완벽한 두개의 쇠원은 불꽃만 튀기고 이루어질수 없다. 그래서.. 자전거의 뒷바퀴는 만날수 없다. 그러나 조금씩 흠이 있는 톱니바퀴는 평생을 서로 맞물려 돌아간다.. 그러니 사랑은 서로간의 조금씩의 흠이 있어야 한다고 생각한다.
183. 제동님의 추천 책 - 그 남자, 그 여자  中『 그래.. 그정도면 됐어. 너무 애쓰지마. 나, 오늘 니가 그런 이야기 할 줄 알고 있었어. 내가 원래 좀 똑똑하잖아. 여기 너무 조용한데.. 나도 무슨말을 좀 해야 할 텐데.. 근데 나는, 다 이해해. 그러니까, 나는 우리가 끝까지, 그러니까 내 말은,ㅡ 우리가 결혼을 하거나.. 그럴거라고는 처음부터 생각 안했어. 내가 나 자신을 더 잘 아니까. 그만울어.. 누가 죽은 것도 아닌데.. 사람들이 이상하게 보겠다.. 근데 있잖아. 아무리 생각해도 니가 미안하다는 말은.. 좀 웃긴다. 왜냐하면.. 그동안 나는 좋았거든. 살면서, 제일 좋았던것 같아 늙어서도.. 그렇게 말할 수 있을 것 같아. 스물일곱, 스물여덟.. 그때 내 삶은 니 덕분에 초라하지도, 가난하지도 않았다고.. .. 여기 공기가 너무 답답하다. 우리, 그만 일어나자! 』
184. 가슴과 입은 한뼘차인데 가슴에 담아둔 말을 입밖으로 내놓기가 이렇게 힘들까..
185. 제동씨가, 술먹고 여자에게 찾아가서 고백할때 쓴말인데요 술을토하는건 쉬운데 너에게향한 내마음은 토하는게 힘들다
186. 춤은 박자를 생각해서추면 그 박자를 놓치게됩니다.. 사랑도 너무많은 생각을 하면 그 박자를 놓치게 되는 법이죠...
187. 상대방의 마음으로 가는 여권은 전세계에 아무데도 없거든요? 상대방의 마음속으로 들어가는 여권이 있다면 억만금을 주더라도 아마 그게 최고일 겁니다. 가격이 어찌됐던 누구의 마음이라도 들어갈 수 있는 여권이 있다면... 근데 신이 그걸 만들어 놓지는 않거든요. 왜냐하면 그 여권을 가질 수 있는 권한은 사랑하는 사람 그 한사람밖에 가질 권한이 안되기 때문입니다. 누구도 대신 발급해 줄 수 없는 거거든요. 그러니까 더욱 더 그 사람한테 대놓고 얘기하기가 힘들죠. 세상에서 단 한군데 밖에 없는 창구이기 때문에 그 창구에서 거절당하면 딴데 어디 갈데가 없으니까 망설여 지는 거에요. 그리고 그 여권도 여러장이 있는게 아닙니다. 평생을 통틀어 그 사람 마음속에서 한두장 정도밖에 발급이 안됩니다.
188. 새 두 마리를 묶어라. 네 개의 날개를 가지겠지만 결코 날 수 없다. 사랑이라는 것도 그래요. 그 사람 나름대로의 방식으로 내게 날아오게 해야겠지만 내 방식을 강요하면 네 개의 날개는 가지겠지만 절대로 날 수는 없겠죠. 그러니까 그 분의 사랑방식을 존중해 주는 것도 참 좋을 것 같아요.
189. 해는 아침에 가장 먼저 일어나서 새벽을 깨우고 중천에 떠서 모든 것을 비추며 가장 높은 곳에 있으면서 때를 아는데 여러분들은 해보다 더 빛나는 존재인 것 같네요.
190. 호수에 던진 돌멩이가 오래도록 가라않아 있듯 사랑도 사람의 마음속에 영원히 가라앉아 있습니다. 바다보다도 깊은 사람의 마음속에 가라앉는 것은 사랑 밖에 없습니다.
191. 눈에 눈물이 없었다면 마음의 무지개가 피지 못했을 것이다.
192. 꽃이 피어나서 좋은 것은 보는 이들에게 아름다움을 전하기 대문이고, 우리가 태어나서 좋은 것은 다른 이들에게 사랑을 전하기 때문이다.
193. 위대한 사랑이 있는 곳에는 언제나 기적이 있다.
194. 무지개를 보려면 비를 참고 견뎌야 한다
195. 비어있던 공간을 채워두는것, 그것이 배려의 본질이다.
196. 엄마라는 자리만큼 당신을 행복하게 하거나 슬프게 하거나 자랑스럽게 하거나 피곤하게 하는 것도 없을 것이다.
197. 잊으려 원하는 만큼 기억에 강하게 남는 것은 없다.
198. 파랑새를 찾아 떠돌다가 결국에는 자신의 마음속에 있다는 것을 깨닫듯이 행복도 멀리 있는게 아니라 자신의 마음 속에 있습니다.
199. 어느 스님밑에 스님이 되길 원하는 제자가 있었는데 어느날 스님이 그제자를 불러서 밥그릇에 물을 떠오고 소금도 가져와라이랬대여 그래서 제자가 두가지를 가져오니까 스님이 물에 소금을 타서 마시라고했대요 당연히 물맛은 짜겠죠. 그러더니 이번엔 소금을 들고 근처의 강가를 대려갔어요 이번엔 강에 소금을 붓더니 마셔보라는거에요 당연히 안짜겟죠. 제자는 왜 이런 행동을 하는지 이해못하고있었어요 그때 스님이 말을했죠 세상을 살면서 고통이 찾아오는순간이 있을것이다, 하지만 그때마다 매번 짠맛을 본다면 힘이들것이라고, 만약에 고통을 피할수없다면 자신의 그릇을 크게 만들면 그 고통은 더이상 짜지않을것이다라고요...
200. 말로만 사랑하는 사람은 여자의 입술에만 신경을 쓰고 눈으로 사랑하는 사람은 연인의 마음을 들여다보려 한다 ..
201. 사랑으로 켜진 불은 아무리 좋은 소방관이라고 해도 꺼지게 할수없고 아무리 유명한 방화범이라고 해도 사랑에다가 불을 지필수는 없다.


/*

 김제동 어록을 뿌려주는 파일입니다.  ( 자바스크립트 버전 )

 DRL License by ice@ice.pe.kr
 DRL ( Developer Respect License = 개발자 존중 라이센스 )
 개발자의 노고를 생각하여 최소한 개발자를 변경해 배포하는 일은 없도록 합시다.

*/



글자 텍스트를 이미지로 변환합니다.


http://oxtag.com/php/GDImgText/









아래는 보너스..-_-;


색상표, 색상코드, 컬러 테이블, 색상선택기, 컬러표


http://oxtag.com/html/ex/colorcode/colorcode01.html


http://oxtag.com/html/rgbcolor.htm



브라우저/OS 정보
javascript:alert(navigator.appName+navigator.appVersion);
 
브라우저
javascript:alert(navigator.userAgent);
 
레퍼러 정보
javascript:document.referrer
 
도메인 정보
javascript:document.domain
 
URL 정보
javascript:document.location
javascript:document.URL

http://oxtag.com/html/ex/date1.html
미리보기를 보시면 별루 안이쁘죠. 스타일을 홈에 맞게 꾸며서 사용하세요.

<script language="JavaScript">
var today = new Date();
var meetday = new Date("04-01-2000");//이부분에 만난날짜를 수정해주세요^^
var days = Math.ceil((today-meetday)/24/60/60/1000);
days=days-1
</script>
<script language="JavaScript">
var today = new Date();
var meetday = new Date("04-04-2000");//이부분에 사귄날짜를 수정해주세요^^
var nals = Math.ceil((today-meetday)/24/60/60/1000);
nals=nals-1
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("Jan, 26, 2001"); //만난지 300일째 되는날
var aa = y2.getTime();
var bb = today.getTime();
var day100 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("April, 1, 2001"); //1년 되는날
var aa = y2.getTime();
var bb = today.getTime();
var year1 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("Dec, 27, 2002"); //1000day 되는날
var aa = y2.getTime();
var bb = today.getTime();
var day1000 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("April, 1, 2010"); //10년 되는날
var aa = y2.getTime();
var bb = today.getTime();
var year10 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("Feb, 15, 2001"); //생일날짜를 수정해주세요^^
var aa = y2.getTime();
var bb = today.getTime();
var birth1 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
<script language="JavaScript">
var today = new Date();
var y2 = new Date("March, 9, 2001"); //생일날짜를 수정해주세요^^
var aa = y2.getTime();
var bb = today.getTime();
var birth2 = Math.ceil((aa-bb)/24/60/60/1000);
</script>
</head>

<body style="margin:0px;">

<SCRIPT LANGUAGE="JavaScript">
<!--
var today = new Date();
var year = today.getYear();
if (year < 2000) year+=1900;
var month = today.getMonth();
var date = today.getDate();
document.write("  ▷ 오늘은 "+year+ "년 "  + (month+1) + "월 " + date + "일 입니다.");
//현재 날짜를 표시하는 스크립트 -->
</SCRIPT>
<br>
<script language="JavaScript">
document.write("  ▷ 우리는 만난지 " + days + "일 되었습니다.")
</script>

<BR>
<script language="JavaScript">
document.write("  ▷ 300일이 되는 날은 " +   day100   + "일 남았습니다.") //300일
</script>
<br>

<script language="JavaScript">
document.write("  ▷ 1년이 되는 날은 " +   year1   + "일 남았습니다.") //1년
</script>
<br>

<script language="JavaScript">
document.write("  ▷ 1000일이 되는 날은 " +   day1000   + "일 남았습니다.") //1년
</script>
<br>

<script language="JavaScript">
document.write("  ▷ 10년이 되는 날은 " +   year10   + "일 남았습니다.") //10년
</script>
<br>

<script language="JavaScript">
document.write("  ▷ 제 생일은 " +   birth1   + "일 남았습니다.") //생일날짜나 기념일등을 적어보세요.
</script>
<br>
<script language="JavaScript">
document.write("  ▷ 그녀 생일은 " +   birth2   + "일 남았습니다.")
//생일날짜나 기념일등을 적어보세요.
</script>


D-DAY 기념일 카운터!

사랑하는 사람의 중요한 날~ 잊지 말아야할 소중한 시간~

홈페이지! 블로그! 티스토리! ... 디데이 카운터와 기념일 카운터를 달아보세요.

사용자 삽입 이미지





미리보기 : http://tagpia.maru.net/php/p/Date/D-DAY/



디데이 카운터 사용법 : http://tagpia.maru.net/php/p/Date/D-DAY/user.php



기념일 카운터 사용법 : http://tagpia.maru.net/php/p/Date/D-DAY/user2.php



블로그나 홈페이지에 삽입해서 사용하시면 되요...;;

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 문을 이용해서 임의로 정렬할 수 있도록 문자순번을 맞춰주면 된다.

2007년 10월 20일 기준 포털 사이트 메일 서비스 용량 및 주소 안내 - By Minwoo(skymino@gmail.com)
(용량의 기준은 무료사용자를 기준으로 합니다.)



*************** 코넷 ***************

01. 20MB의 용량제공
[Home] http://www.kornet.net/
mail-tags.com


*************** 핫메일 ***************
02. 5GB의 용량제공
mail-tags.com
[Home] http://hotmail.com


*************** 지메일 ***************
03. 3928MB의 용량제공
mail-tags.com
[Home] http://gmail.com/


*************** 한메일 ***************
04. 1GB의 용량제공
[Home] http://daum.net/


*************** 네이버 ***************
05. 기본 300MB 확장 1GB업그레이드
[Home] http://naver.com
mail-tags.com


*************** 네이트 ***************
06. 100MB의 용량제공
[Home] http://nate.com
mail-tags.com


*************** 엠파스 ***************
07. 2GB의 용량제공
[Home] http://empal.com
mail-tags.com


*************** 야후 코리아 ***************
08. 무제한
[Home] http://mail.yahoo.co.kr
mail-tags.com


*************** 파아란 ***************
09. 1GB의 용량제공
[Home] http://www.paran.com/
mail-tags.com


*************** 천리안 ***************
10. 20MB용량을 제공
[Home] http://www.chol.com
mail-tags.com


*************** 프리챌 ***************
11. 30MB의 용량제공
[Home] http://mail.freechal.com
mail-tags.com


*************** 드림위즈 ***************
12. 100MB의 용량제공
[Home] http://www.dreamwiz.com/
mail-tags.com


*************** 싸이월드 ***************
13. 2,000 MB용량을 제공
[Home] http://mail.cyworld.com/
*************** 테라메일 ***************
14. 1G (1024 MB) 단일최대 20MB
[Home] http://www.teramail.com/cgi-bin/index.cgi
mail-tags.com


*************** 하나포스 ***************
15. 100MB의 용량제공
[Home] http://www.hanafos.com/
mail-tags.com


*************** 코리아닷컴 ***************
16. 100MB의 용량제공
[Home] http://mail.korea.com
mail-tags.com 



이메일주소를 이미지로 쉽게 만들어주는 사이트를 소개합니다.
이메일 네임택 ***************

01. 국내 이메일 계정(다음, 프리챌 등) - http://cat.powerdb.net/email/index.php
02. 해외 이메일 계정(지메일, 야후, AOL 등) - http://services.nexodyne.com/email/index.php
03. 이메일 네임택 - http://www.maruhosting.com/community/diy.htm
04. 메일 태그 - http://www.mail-tags.com/
05. 이미지패러디 - http://imageparody.com/

집과 회사에서 노트북을 사용해 네트워크에 접속하려면 그때마다 IP주소를 바꾸어 주어야 하는 불편이 있습니다.

화사는 고정IP를 쓰고 집은 유동IP를 쓰기 때문입니다.

집과 회사 에서 쓸때마다 IP변경없이 쓰려면 특정 상용프로그램이 있어야 하지만 윈도우XP 사용자라면 위의 문제를 해결 할 수있습니다.

자.. 그럼 차근차근 따라해보세요^^


IP를 설정 하려면 제어판->네트워크 연결->로컬 영역연결을 오른쪽 마우스 버튼 클릭 나타나는 메뉴에서 속성을 선택하거나 아래 그림처럼 해도 됩니다.

사용자 삽입 이미지



그러면 로컬영역 연결상태 창이 나타나면 속성을 클릭합니다.

사용자 삽입 이미지



속성을 클릭하면 아래와 같이 순서대로 진행합니다.

사용자 삽입 이미지



순서대로 진행하면 아래와 같이 인터넷 프로토콜.. 창이 뜹니다.

일반탭이 유동IP(집에서 사용하는 주소)를 입력합니다.

대부분 자동으로 설정이 되어있을 겁니다.

사용자 삽입 이미지



대체구성을 클릭합니다. 여기가 고정IP(회사에서 사용하는 IP)를 입력합니다. 그림처럼 사용자구성을 체크하고 IP,서브넷..,등에 주소를입력하고 확인을 클릭합니다.

사용자 삽입 이미지



자! 이제 설정이 끝났습니다. 쉽죠.. 그렇죠.ㅎㅎ

이제 집이든 회사에서든 랜선만 꽂아넣고 인터넷을 하시면 별도의 IP변경없이 인터넷을 할 수있습니다.


이렇게 구성하시면 유동IP를 먼저 가져오고 가져오지 못하면 대체구성에 설정된 고정IP를 사용하게 됩니다.

이런 원리로 인터넷이 됩니다.


그럼 다들 성공하시기를...

참고로 노트북용입니다.

펌:http://cafe.naver.com/sssens

IE7 단축키

인터넷정보2007. 10. 20. 17:08
사용자 삽입 이미지

단축키의 유용함은 써 본 사람만이 안다는...

(깔끔하게 정리해 주신 윈앤위 블로그 배우기님께 감사!)


키 또는 조합
용도
Esc
페이지 읽기 중지
F5 또는 Ctrl+R 또는 Ctrl+F5
새로고침(Reflash)
Shift+Spacebar
페이지 위로 이동(스크롤 업)
Spacebar
페이지 아래로 이동(스크롤 다운)
Alt+O
URL로 열기 및 기능 호출
Shift+F10
선택한 아이템의 콘텍스트 메뉴 호출
Shift+마우스 왼쪽 버튼
새 창에 띄우기
Ctrl+마우스 왼쪽 버튼
현재 탭을 유지하면서 백그라운드로 새 탭 열기
Ctrl+Shift+마우스 왼쪽 버튼
현재 탭에서 새 탭으로 이동하면서 열기(포그라운드 열기)
F11 또는 Alt+Enter
전체 화면 도드로 전환
Ctrl 키 콤비네이션
Ctrl+Enter
주소표시줄에서 www와 .com자동 삽입
Ctrl+T
새 탭 열기
Ctrl+Tab
열린 탭들 사이 전환(오른쪽으로 순환)
Ctrl+Shift+Tab
열린 탭들 사이 전환(왼쪽으로 순환)
Ctrl+W
열린 탭 닫기, 탭이 없으면 IE7종료
Ctrl+숫자(n)
3개의 탭이 열렸다면 1, 2, 3으로 선택(8개까지 가능)
Ctrl+9
마지막으로 열린 탭 선택
Ctrl+Alt+F4
모든 탭 닫기
Ctrl+Q
빠른 탭 열기(현재 탭에서 열린 모든 탭을 출력해서 선택)
Ctrl+(+)
10% 비율로 페이지 확대
Ctrl+(+)
10% 비율로 페이지 축소
Ctrl+0
100% 기본 값으로 복원
Ctrl+A
페이지 전체 선택
Ctrl+B
즐겨 찾기 관리 기능 호출
Ctrl+D
즐겨찾기에 추가 및 기능 호출
Ctrl+E
검색 상자 선택
Ctrl+F
찾기 및 기능 호출
Ctrl+H
즐겨찾기 센터의 열어 본 페이지 목록
Ctrl+I
즐겨찾기 센터의 즐겨 찾기 목록
Ctrl+J
즐겨 찾기 센터의 피드 목록
Ctrl+N
새 창 띄우기
Ctrl+P
인쇄 및 기능 호출
Ctrl+R
새로 고침
Ctrl+F4
탭 닫기
Alt 키 콤비네이션
Altr
메뉴 호출
Alt+Enter
주소표시줄에서 새탭 열기
F11 또는 Alt+Enter
IE 윈도에서 전체 화면 도드로 전환
Alt+Home
시작 페이지로 이동
Alt+F4
현재창 닫기 및 기능 호출
Alt+왼쪽 방향키
이전 페이지로 이동
Alt+오른쪽 방향키
다음 페이지로 이동
Alt+스페이스
IE7 윈도 메뉴
Alt+A
IE7 메뉴 즐겨 찾기 목록 호출
Alt+C
즐겨 찾기 센터호출
Alt+D
주소 표시줄 선택
Alt+E
IE7 메뉴 편집 호출
Alt+F
IE7 메뉴 파일 호출
Altl+M
IE7 도구 홈 호출
Alt+H
IE7 메뉴 도움말 호출
Altl+J
IE7 도구 피드 호출
Altl+O
IE7 도구 도구 호출
Altl+P
IE7 도구 페이지 호출
Alt+T
IE7 메뉴 도구 호출
Alt+V
IE7 메뉴 보기 호출
Altl+Z
즐겨 찾기 추가
펑션키
F1
도움말
F3
찾기 및 기능 호출
F4
주소표시줄에 방문한 URL목록 출력
Ctrl+F4
현재 탭 닫기
F5
새로 고침
F6
주소표시줄 선택
F10
IE7 메뉴 열기
F11
전체 화면 모드


1. 알어드민(RAdmin, Remote Administrator) 사용 환경

Remote Administrator를 설치하기 위해서는 두 컴퓨터가 인터넷이나 LAN으로 서로 연결되어 있어야 하고, TCP/IP 프로토콜이 설치되어 있어야 합니다.
RAdmin은 리모트 컴퓨터와 원격으로 제어할 컴퓨터에 모두 설치해야 합니다.

2. 프로그램 설치하기

radmin 21k.exe 다운로드
위의 프로그램을 다운로드 받아 '현재 위치에서 이 프로그램을 실행'을 선택합니다.
다음->동의함->다음->설치시작->완료를 선택합니다.

3. 알어드민 서버 보안(암호) 설정하기

다른 사람이 이 컴퓨터를 임의로 제어할 수 없도록 암호 설정이나 TCP 포트를 변경합니다.
시작->프로그램->Remote Administrator v2.1->Settings for Remote Administrator Server를 실행해서 '암호 설정/변경'을 클릭합니다.

4. 원격컴퓨터 제어하기

시작->프로그램->Remote Administrator v2.1->Remote Administrator viewer를 실행해서 사용을 선택합니다.
위에서 연결 -> 새 연결을 클릭해서 원격 컴퓨터의 IP 주소(211.219.100.85)나 도메인(rad.nameip.net)을 입력하고 '연결'를 선택합니다.


정상적으로 접속이 되면 아래와 같이 원격제어 스크린이 나오며, 원격컴퓨터를 직접 제어할 수 있습니다.
 
Remote Administrator viewer
Settings for Remote Administrator server
Start Remote Administrator server
Stop Remote Administrator server
알어드민(Radmin)은 뷰어와 서버 두 가지 프로그램으로 구성되어 있습니다. 뷰어는 원격접속하기 위해 사용하는 프로그램이며, 서버는 원격에서 접속할 수 있도록 해 주는 프로그램입니다.

Remote Administrator viewer

리모트 컴퓨터를 원격제어, 파일전송, 종료하기 위해 사용하는 프로그램입니다. 이 프로그램을 실행시켜서 원격 컴퓨터에 접속합니다.

Settings for Remote Administrator server

알어드민 서버 설정을 위해 사용하는 프로그램입니다. 알어드민 서버를 시스템 서비스로 인스톨하거나 제거하는 명령어와, 패스워드 보안, NT 유저 레벨 보안, IP 필터, TCP 포트 변경, 접근 거부 등 보안 관련 작업을 하기 위해 사용합니다.

Start Remote Administrator server

Radmin 서버를 스타트 시키면 시스템 트레이 박스 Radmin 서버 아이콘이 생김니다. Radmin 서버를 스타트 시켜야 다른 컴퓨터가 원격에서 접근할 수 있습니다.

Stop Remote Administrator server

Radmin 서버를 스탑시키면 다른 컴퓨터가 원격에서 접근할 수 없습니다.
 

Remote Administrator viewer


Remote Administrator viewer 화면 설명
Remote Administrator viewer 메뉴
원격컴퓨터로 연결하기
중간 서버를 통해 리모트컴퓨터 제어

Remote Administrator viewer 화면 설명

원격 컴퓨터에 처음 연결을 할 때 새연결 아이콘을 클릭해서 원격 컴퓨터의 아이피를 입력하면 연결할 수 있습니다. 처음 연결한 경우가 아니라면 연결모드를 선택한 후에 연결리스트를 더블 클릭하면 원격컴퓨터에 연결할 수 있습니다.

Remote Administrator viewer 메뉴

Remote Administrator viewer 연결 화면

알어드민(RAdmin) 서버의 TCP 포트가 4899 번이 아니라면 TCP 포트를 변경해 주어야 합니다.

중간 서버를 통해 연결

 

Settings for Remote Administrator server


Settings for Remote Administrator server 메인 화면
Remote Administrator 서비스
알어드민 서버 암호 설정
NT 유저 레벨 보안 사용
옵션 메인 화면(IP 필터, TCP 포트, 로그파일, 연결시도 알림)
옵션 설정 예

Settings for Remote Administrator server 메인 화면

Settings for Remote Administrator server

Remote Administrator 서비스 설치

서비스 설치를 해야만 부팅할 때 알어드민(RAdmin, Remote Administrator) 서버가 시스템 서비스로 동작합니다. 항상 알어드민 서버가 동작하고 있을 필요가 없을 때는 서비스 제거를 한 후에, 사용할 때 알어드민 서버를 실행(Start Remote Administrator server)시켜 주어도 됩니다.

알어드민 서버 암호 설정

Settings for Remote Administrator server
아무나 접속하지 못하도록 암호를 설정하시기 바랍니다. 여기서 암호 대신에 NT 유저 레벨 보안을 설정할 수도 있습니다.

NT 유저 레벨 보안 사용

Settings for Remote Administrator server
암호 대신 윈도 NT 유저 레벨 보안을 사용할 수 있습니다. 이 기능은 NT/2000/XP 에서만 지원 되며, 윈도에 등록된 사용자 아이디와 사용자의 암호, 도메인(또는 작업그룹)을 이용해서 외부에서 접속을 하는 보안입니다. 각 사용자별로 모드별 연결 권한을 할당할 수 있습니다.

옵션 메인 화면

Settings for Remote Administrator server
알어드민(RAdmin, Remote Administrator) 서버는 암호 설정뿐만 아니라 TCP 포트 변경과 IP 필터 기능에 의해 완벽한 보안을 제공합니다.
로그파일기록 기능은 외부에서 원격 접근 시도한 PC의 IP와 시간을 기록하게 됩니다.
접근허가묻기 기능을 이용하면 이 PC를 사용하는 사용자나 먼저 원격제어를 하고 있는 사용자가 외부에서 또 다른 원격제어를 시도를 차단할 수 있습니다.
로그파일기록과 IP 필터 기능이나 접근허가묻기의 자동차단 기능을 이용해서 원격에서 접근한 PC의 원격 접속은 차단하고 그 PC의 IP만을 기록할 수 있습니다.

옵션 설정 예

Settings for Remote Administrator server
TCP 포트를 변경한 알어드민 서버에 연결하기 위해서는 연결하는 PC에 설치된 Remote Administrator viewer의 TCP 포트도 변경해 주어야 합니다.
Settings for Remote Administrator server

Remote Screen


Ctrl+Alt+Del 보내기
클립보드 데이타 전송하기
해상도 변경
업데이트 속도 조절

Remote Screen 설명

원격제어 모드로 접속을 하면 아래와 같은 원격제어 화면이 나타납니다. 원격제어 화면에서 'Ctrl + F12'를 누르거나 알어드민(RAdmin) 아이콘을 클릭하면 아래와 같은 메뉴가 나타납니다. 이 메뉴에서 원격제어 화면에 사용하는 Tool과 설정을 변경할 수 있습니다.
Remote Screen

원격컴퓨터 연결하기(제어,감시,파일전송,종료)


알어드민 뷰어 메인 화면
원격제어모드로 연결하기
감시모드(보기모드)로 연결하기
파일전송 모드로 연결하기
원격종료 모드로 연결하기
Telnet 모드로 연결하기

알어드민 뷰어 메인 화면

알어드민으로 원격 컴퓨터에 처음 접속하는 경우는 새연결로 연결리스트를 만들어서 연결하면 됩니다. 기존에 접속했던 연결리스트가 있으면 연결모드를 선택한 후에 연결리스트를 클릭하면 접속을 할 수가 있습니다.

원격제어모드로 연결하기

원격제어 모드로 연결하면 내 컴퓨터의 마우스와 키보드를 이용해서 원격컴퓨터를 마음대로 사용할 수 있습니다. 내 컴퓨터 모니터안에 원격컴퓨터의 모니터가 다시 생성되서 마치 원격컴퓨터 앞에 앉아 있는 것처럼 사용이 가능합니다.

감시모드(보기모드)로 연결하기

감시모드는 마치 원격컴퓨터 앞에 앉아 있는 것처럼 리모트컴퓨터의 모니터를 내 컴퓨터 모니터 앞에서 볼수는 있지만 내 키보드와 마우스를 이용해서 원격컴퓨터를 조작할 수는 없습니다.

파일전송 모드로 연결하기

파일전송 모드로 접속하면 파일이나 폴더를 반대편으로 드래그해서 서로 복사할 수 있습니다.

원격종료 모드로 연결하기

원격종료는 제어모드로 연결하지 않은 상태에서 원격컴퓨터를 종료할 수 있습니다. 원격종료는 재시작, Shutdown(파워오프전 종료), 파워오프, 로그아웃 중 하나를 선택해서 실행할 수 있습니다.

Telnet 모드로 연결하기

텔넷모드로 접속을 하면 원격컴퓨터의 명령 프롬프트 화면이 내 컴퓨터 모니터에 생성이 되어 각종 명령어를 직접 입력할 수 있습니다.

알어드민 서버 보안 설정하기


알어드민 서버 설정 메인 화면
128비트 암호화
암호 설정하기
TCP 포트 변경하기
IP 필터 기능 설정하기
IP 필터 기능을 이용해서 외부 접근을 완전 차단하기
서비스 제거를 이용해서 외부 접근을 완전 차단하기
접근허가묻기를 이용해서 승인하지 않은 접근을 차단하기
로그 파일에 외부에서 접근한 IP 기록하기

알어드민 서버 설정 메인 화면

128비트 암호화

알어드민에서 주고 받는 데이타는 모두 128비트 암호화 처리가 되기 때문에 이 데이타를 해킹할 수는 없습니다.

암호 설정하기

알어드민 서버에 암호를 설정하면 외부에서 연결을 할 때 암호 묻는 창이 뜨며, 정확한 암호를 입력해야만 이 PC에 접속할 수 있습니다.

NT 유저 레벨 보안 설정하기

윈도 NT/2000/XP 에서 암호 대신에 사용할 수 있으며, 윈도에 등록된 사용자와 암호, 도메인(또는 작업그룹)을 알아야만 외부에서 연결이 가능합니다. 외부에서 접속할 때 사용자와 암호, 도메인(작업그룹)을 묻는 창이 나타납니다.
사용자별로 접근 가능한 연결모드를 지정할 수 있습니다.

TCP 포트 변경하기

알어드민 서버에서 TCP 포트를 변경할 수 있습니다. TCP 포트를 변경하면 이 포트를 알아야만 외부에서 연결이 가능합니다. 외부에서 연결할 때 알어드민 Viewer 에서 기본 포트 대신에 이 TCP 포트를 입력한 후에 연결을 해야 합니다.
TCP 포트를 바꾼 후에는 RAdmin 서버를 반드시 재시작해야 합니다.

IP 필터 기능 설정하기

IP 필터 사용을 체크하면 이곳에 등록된 IP만 알어드민 서버에 연결할 수 있습니다.
IP=211.219.100.85, 서브넷마스크 = 255.255.255.255 를 입력하면 211.219.100.85 번 IP만 접근할 수 있으며, IP=10.1.3.0, 서브넷마스크 = 255.255.255.0 을 입력하면 10.1.3.1 에서 10.1.3.254 까지의 IP가 이 PC에 접근할 수 있게 됩니다.

IP 필터 기능을 이용해서 외부 접근을 완전 차단하기

IP 필터 사용을 체크하고 IP를 등록하지 않는다면 외부의 어떤 PC도 알어드민 서버에 접근을 할 수가 없습니다.
그리고 로그파일을 체크한다면 외부의 접근은 차단하면서 외부에서 접근하려고 했던 PC의 IP는 로그파일에 기록할 수 있습니다.

서비스 제거를 이용해서 외부 접근을 완전 차단하기

서비스 제거를 클릭한다면 알어드민 서버가 시스템 서비스로 동작을 하지 않습니다. 즉 재부팅하더라도 알어드민 서버는 실행되지 않습니다. 알어드민 서버를 시스템 서비스로 다시 실행하려면 서비스 설치를 클릭하시고, 필요한 순간에 잠깐 사용하시려면 프로그램 그룹중에 Start Remote Administrator server를 실행하시면 됩니다.

접근허가묻기를 이용해서 승인하지 않은 접근을 차단하기

접근허가묻기를 체크하면 외부에서 접근할 때 접근 허가를 묻는 창이 윈도에 나타납니다.
여기서 접근 허가 여부를 결정할 수 있습니다. 또한 접근허가묻기를 체크하고 일정시간이 지난 후에 자동 허가와 자동 거부를 설정할 수 있습니다.
자동 거부를 체크하고 로그파일을 체크한다면 접근은 차단하면서 외부에서 접근하려고 했던 PC의 IP를 기록할 수 있습니다.

로그 파일에 외부에서 접근한 IP 기록하기

위 그림에서 로그파일사용을 체크하고 파일이름을 입력하면 외부에서 접근한 PC의 IP와 알어드민 서버의 동작 상태 등을 기록할 수 있습니다.
파일전송 모드나 원격제어 모드에서 외부에서 접근한 사용자가 이 파일을 지우거나 수정할 수 있습니다
 

중간 서버를 통해 사설 IP를 사용하는 PC 제어


알어드민은 직접 연결되어 있지 않더라도 두 PC와 동시에 연결된 PC를 이용해서 원격제어가 가능합니다.
먼저 인터넷에 연결된 PC에 대한 연결리스트를 만듭니다.
사설 IP를 접속할 연결리스트를 만듭니다.
이때 중간서버를 통해 연결을 체크한 후에 인터넷에 연결된 PC의 연결리스트를 선택해 줍니다.
이제 사설 IP 연결리스트를 클릭한다면 연결이 가능할 겁니다.
만약 중간 알어드민서버와 사설 IP의 알어드민 서버에 암호가 설정되어 있다면 첫번째 묻는 암호는 중간 서버에 설정된 암호이며, 두번째 묻는 암호는 사설 IP에 설치된 알어드민 서버의 암호입니다.

아이피공유기내의 사설IP를 쓰는 원격컴퓨터제어


1. Soho Router
2. Netgear Router
3. Repotec Gateway Router
4. Anygate IP Router
5. IPTIME

아이피공유기를 사용하는 네트워크

알어드민으로 아이피공유기 내부 PC 연결하기

아이피공유기를 사용하는 경우 외부에서 아이피공유기내의 PC를 제어하기 위해서는 공유기의 WAN IP로 접속해야 하고, 공유기에서 내부 PC의 알어드민 서버로 접속할 수 있도록 NAT 방화벽을 오픈해 주어야 합니다.

소호라우터에서 내부 PC로 알어드민의 TCP 포트 연결하기

아이피공유기에서 내부 PC로 알어드민 접속을 가능하게 하는 방법은 두가지가 있습니다.
하나는 TCP 포트를 포워딩하는 방법이고, 다른 하나는 DMZ Host를 이용하는 것입니다.
아래는 Sohomate 의 Soho Router에 대한 설정의 예입니다. 참고하셔서 자신이 가지고 있는 공유기에도 적용을 하시기 바랍니다.
DMZ Host 라는 용어는 모든 공유기에서 같이 사용하는 용어이지만 TCP 포트 포워딩을 설정하는 방법은 각기 용어가 상이합니다.
Soho Router 는 Virtual Server 라고 하며, Linksys Router 에는 Forwarding 이라고 합니다. 일부 공유기는 Local Server 라고도 합니다.
공유기 설명서에 보시면 Web 서버나 FTP 서버를 설정하는 방법이 나와 있는데 이것이 아이피공유기에서 TCP 포트를 포워딩하는 방법을 설명하는 것입니다.
아이피공유기의 기본 IP인 192.168.123.254를 인터넷 익스플로러에 입력하면 아래와 같은 로그인 창이 뜹니다. 패스워드 입력란에 'admin' 이라고 입력한 후에 Log in 을 클릭하면 아이피라우터를 설정할 수 있습니다.
알어드민으로 접속을 할 때는 이곳에 있는 WAN IP 주소로 접속을 해야 합니다.
Multi-Functional Broadband NAT Router (R1.93s)

User's
Main Menu

System Password

(default: admin)

System Status

Item WAN Status Sidenote
IP Address 211.219.100.85 Static IP
Subnet Mask 255.255.255.248
Gateway 211.219.100.81
Domain Name Server 168.126.63.1, 168.126.63.1
Item Peripheral Status Sidenote
Printer Not ready

Virual server를 이용해서 원격컴퓨터제어

왼쪽 메뉴에서 Virtual Server를 클릭해서아래와 같이 설정을 해 주어야만 외부에서 아이피공유기 내부의 PC를 원격제어할 수 있습니다.
여기서 Service Ports는 알어드민 서버가 사용하는 TCP 포트(기본 : 4899)이며, Server IP는 원격으로 제어할 알어드민 서버가 설치된 PC의 사설 아이피(예, 192.168.123.100)입니다.
이렇게 설정한 후에 Enable 에 체크한 후에 Save를 클릭하고 Reboot 를 클릭한다면 외부에서 접속할 환경 설정이 끝나는 것입니다.
Multi-Functional Broadband NAT Router (R1.93s)

Administrator's Main Menu

  • Status
  • Toolbox
  • Primary Setup
  • DHCP Server
  • Virtual Server
  • Special AP
  • Access Control
  • Misc Items

Virtual Server

ID Service Ports Server IP Enable
1 192.168.123.
2 192.168.123.
3 192.168.123.
4 192.168.123.
5 192.168.123.
6 192.168.123.
7 192.168.123.
8 192.168.123.
9 192.168.123.
10 192.168.123.
Well known services ID

Saved! Items marked with don't take effective until rebooting!

DMZ를 이용해서 원격컴퓨터제어

DMZ란 '비무장 지대'를 나타내는 군사용어에서 사용하듯이 아이피공유기의 NAT 방화벽이 해제되어 외부에 노출되는 PC를 의미합니다.
이런 경우는 인터넷에 공유하지 않은 PC 하나만 단독으로 인터넷에 직접 연결되어 있는 것과 동일한 환경에 놓이게 됩니다.
DMZ host의 알어드민 서버가 설치된 PC의 IP 주소(예, 192.168.123.100)을 입력하면 외부에서 이 PC를 원격 제어가 가능합니다.
아이피를 입력하고 Enable를 체크하고 'Save'를 클릭한 후에 'Reboot'를 클릭하면 설정이 적용됩니다.
Multi-Functional Broadband NAT Router (R1.93s)

Administrator's Main Menu

  • Status
  • Toolbox
  • Primary Setup
  • DHCP Server
  • Virtual Server
  • Special AP
  • Access Control
  • Misc Items


Miscellaneous Items

Item Setting Enable
IP Address of DMZ Host 192.168.123.
Remote Administrator Host
Administrator Time-out seconds (0 to disable)
Discard PING from WAN side
Non-standard FTP port
MAC Address for Wake-on-LAN

Saved! Items marked with don't take effective until rebooting!
 
 
 
 

유동IP를 사용하는 원격컴퓨터 제어


네임아이피

유동아이피를 사용하는 네트워크

유동IP를 사용하는 원격컴퓨터에 아이피 변경과 관계없이 수시로 접속하기 위해서는 IP 대신에 도메인(예, rad.nameip.net)을 이용해서 접속해야 합니다.
네임아이피서비스(http://www.nameip.co.kr)를 가입한 후에 네임아이피클라이언트 프로그램을 원격컴퓨터(유동IP)에 설치하면 네임아이피클라언트가 IP가 변경되면 수시로 네임아이피 서버로 변경된 IP를 통보하게 됩니다.
다른 컴퓨터에서 원격컴퓨터에 도메인(예, rad.nameip.net)으로 접속을 하게 되면 네임아이피 서버가 도메인(rad.nameip.net)에 대한 IP(예, 211.219.100.85)를 알려주어서 유동IP를 사용하는 컴퓨터에 접속을 할 수 있게 됩니다.

알어드민으로 원격컴퓨터 접속하기

알어드민으로 원격컴퓨터에 연결을 할 때 IP 주소 대신에 컴퓨터이름(도메인)을 입력해서 연결을 합니다.

중간서버를 이용해 원격컴퓨터에 연결하는 사용자관리


중간서버를 이용해 다수의 원격컴퓨터에 연결하는 사용자(Viewer) 관리

(1) 외부에서 접근하는 사용자들을 관리하는 관리자 PC의 IP만 원격제어할 모든 PC의 IP 필터에 등록합니다.
(2) 외부에서 PC를 원격제어할 때 중간 서버에 관리자 PC 연결리스트를 선택하고 원격제어할 PC의 IP를 IP 주소에 입력해야 합니다.
(3) 관리자 PC에서는 각종 서버 보안을 설정합니다.
관리자 PC의 접근을 차단하면 외부에서 관리자 PC 뿐만아니라 다른 모든 PC에 접근을 할 수가 없습니다.
접근허가묻기를 체크하고 자동거부를 선택하면 관리자의 승인을 받아야만 내부 컴퓨터에 연결을 할 수가 있게 됩니다.

IP Scanner를 이용해 꺼져 있는 원격컴퓨터 켜기


컴퓨터와 랜카드의 Wake-on-LAN 기능을 이용해서 원격에서 켜는 방법입니다.
Wake on-LAN 기능은 LAN 상의(WAN 상이 아님)의 PC를 원격에서 켤수 있는 기능입니다. 따라서 인터넷을 통해서 원격에 있는 컴퓨터를 켤 수는 없습니다.
그러나 약간만 응용해도 원격에서 이 기능을 이용해서 컴퓨터를 켤 수가 있습니다.
조건
  • 꺼져 있는 컴퓨터의 마더 보드에서 Wake-on-LAN 기능 지원
  • 꺼져 있는 컴퓨터의 랜카드에서 Wake-on-LAN 기능 지원
  • 꺼져 있는 컴퓨터의 LAN 상의 2대 이상의 컴퓨터가 존재
  • 이 중 한대는 반드시 켜져 있어야 함.
  • 켜져 있는 있는 컴퓨터에 알어드민과 ip scanner가 설치되어 있슴.
    이러한 조건일때 원격에서 켜져 있는 컴퓨터에 원격으로 접속을 한다면 Wake-on-LAN 기능을 지원하는 모든 컴퓨터는 ipscanner를 이용해서 켤 수가 있습니다.
    또한 알어드민도 설치되어 있다면 끄고 켜는 것을 자유자재로 할 수 있을 겁니다.
    모든 컴퓨터가 꺼져 있는 경우는 방법이 없으며 LAN상의 컴퓨터가 한대 뿐일때도 방법이 없습니다.
  • . Windows XP 방화벽에서 Radmin 포트 오픈하기
    바탕화면 내 컴퓨터를 더블 클릭합니다.
    XP 방화벽 Radmin
    내 네트워크 환경을 더블 클릭합니다.
    XP 방화벽 Radmin
    네트워크 연결 보기를 더블 클릭합니다.
    XP 방화벽 Radmin
    인터넷에 연결되는 랜카드에 해당하는 로컬영역연결을 클릭한 후에 오른쪽 마우스 버튼을 눌러 나타나는 창에서 '속성'을 클릭합니다.
    XP 방화벽 Radmin
    '고급' 탭을 누른 후에 설정을 클릭합니다.
    XP 방화벽 Radmin
    1. '사용 안함'을 클릭하면 XP 방화벽이 해제되고 Radmin 서버에 접근할 수 있습니다.
    2. XP 방화벽을 해제하지 않은 상태로 Radmin 서버에 접근하려면 '예외' 탭을 누릅니다.
    XP 방화벽 Radmin
    '포트 추가'를 클릭합니다.
    XP 방화벽 Radmin
    이름에 'radmin'이라고 입력하고 포트 번호에 Radmin 서버에 설정되어 있는 포트 번호를 입력합니다.
    TCP 가 체크되어 있어야 합니다. Radmin은 TCP 포트를 사용하기 때문입니다.
    아래는 기본 포트로 설정되어 있는 '4899'번 포트를 사용할 때 설정하는 예제입니다.
    XP 방화벽 Radmin
    모든 설정이 끝나고 확인을 누르면 아래와 같은 radmin 서비스가 나타나고 체크박스에 체크가 되어 있으면 외부에서 연결할 수 있습니다.
    XP 방화벽 Radmin
    그래도 연결이 안된다면 홈페이지 초기화면 http://www.radmin.co.kr/ 에 접속하셔서 포트체크를 해 보시기 바랍니다.
    'open'이라고 나와야 하며, 'blocked'라고 나온다면 방화벽 해제를 잘못 하신 것이니 다시 순서대로 따라 해 보시기 바랍니다.
    Remote Administrator 2.1(알어드민) 접속불가시

    Remote Administrator 2.1 을 설치했는데
    접속이 안되는 경우가 종종 있습니다.
     
    *참고: Remote Administrator 는 PC 원격제어 프로그램으로, Norton PC Anywhere 보다 훨씬 가볍고 빠릅니다. ^^ (용량도 훨씬 적음)
     
     
    Windows XP에서는 보통 방화벽 설정 때문이지만
    방화벽을 해제하거나 Remote Administrator 에게 방화벽을 열어 주었는데도
    접속이 안되는 경우가 있습니다.
     
    제가 이것 때문에 꽤나 고생을 했는데요...
    문제는 윈도우 보안 패치에 있었습니다.
     
    이 현상은 Windows XP에서는 기본적으로 나타나는 것 같고,
    Windows 2000에서는 보안패치를 설치한 경우 나타납니다.
     
    원인은 Windows에서 해당 포트번호의 사용을 막아놓았기 때문인데..
    Remote Administrator  가 기본적으로 사용하는 포트 번호 4000번대 말고,
    아주 높은 포트번호를 사용해 보세요.
    그럼 접속이 잘 됩니다.
    저는 40,000 번 이상의 포트를 사용하고 있습니다.
     
    포트 변경 방법은 아래와 같습니다.
     
    << 서버로 지정할 컴퓨터에서 >>
    시작->프로그램->Remote Administrator->Settings for Remote Administrator Server
    -> 옵션->TCP포트에서 디폴트 포트 사용 체크 해제 -> 번호를 임의로 입력해줌(예. 49,000)
     
    << 접속할 클라이언트 컴퓨터에서 >>
    시작->프로그램->Remote Administrator->Remote Administrator Viewer
    -> 접속할 컴퓨터의 등록정보를 열고->TCP포트에 위에서 입력한 포트번호를 적어줌(예. 49,000)
     
     
    이와 같이 설정하면 잘 접속이 될 것입니다. ^^
    이렇게 해도 안되는 경우엔 방화벽 설정이 안되어 있는 것입니다.
    방화벽 해제는 검색해보면 많이 나오니 다른 글을 참고하세요


    11월 6일 IE7 자동 업데이트 차단 방법

    IE 7
    Windows Automatic Update 배포 정책에 따라 적용되게 됩니다.

    이에 기업에서 해당 부분에 대해 테스트를 하기 위해 우선 사내 컴퓨터에 IE7 차단할 있도록 IE 7 Blocker라는 것을 제공 합니다.


    IE7 Blocker Windows Automatic Update 의해서 자동 배포 되는것 막을 있습니다.

    수동으로 해당 IE 7 다운 받아 설치하는 경우에 대해서는 차단할 없습니다.

    http://www.microsoft.com/downloads/details.aspx?FamilyID=4516A6F7-5D44-482B-9DBD-869B4A90159C&displaylang=en&Hash=ujlzJdww3peuxKrh82WgH9CIS3zjPtzY1%2fSsspZvK8uiGKJCXyNgiVcYrLMIqSZYoiLrEbBOb07Ysy2XmATLCg%3d%3d

    사이트에 해당 툴킷이 제공 됩니다.

    자료에는 Script 또는 ADM 파일을 이용한 정책 확장을 통한 제어 부분이 있습니다.

    아래  내용은 정책을 통한 제어 방법 입니다.

    IE7 Blocker정책 설정/적용 방법)

    1.       IE7BlockerToolkit.exe 파일을 적정한 위치에 압축을 해제 합니다.2.       IE70Blocker.cmd IE70Blocker.adm 기타 참조 파일이 있습니다.

    사용자 삽입 이미지

    3.       IE70Blocker.adm 파일을 C:\Windows\inf 폴더에 복사 하십시오.

    사용자 삽입 이미지

    4.       DC GPMC에서 새로 정책을 만들거나 기존의 추가할 정책을 편집하십시오.

    사용자 삽입 이미지

    5.       해당 정책의 컴퓨터 구성-관리 템플릿에서 템플릿 추가/제거를 선택 합니다.

    사용자 삽입 이미지

    6.       템플릿 추가/제거에서 추가 버튼을 눌러 이전에 복사해 놓은 IE70Blocker.adm 선택하고 열기를 누릅니다.

    사용자 삽입 이미지

    사용자 삽입 이미지

    7.       해당 정책에  컴퓨터 구성-관리 템플릿-Windows Components-Windows Updates Automatic Updates Blockers 라는 것이 생성됩니다.

    사용자 삽입 이미지

    8.       해당 포함되어 있는 정책을 보기 위해서는 보기-필터 사용중을 선택합니다.

    사용자 삽입 이미지

    9.       필터링 창에서 완전히 관리가 가능한 정책 설정만 표시 체크를 해제 하고 확인을 누릅니다..

    사용자 삽입 이미지

    10.    그룹 정책 편집기의 컴퓨터 구성-관리 템플릿-Windows Components-Windows Update-Automatic Updates Blockers에서

    추가된 정책을 확인할 있습니다. (Do not allow delivery of Internet Explorer 7 through Automatic Updates)

    사용자 삽입 이미지

    11.    해당 정책에서 사용을 선택하고 적용하고자 하는 OU 정책을 걸어주시면 됩니다.

    사용자 삽입 이미지


    작업 IEBlockerHelp.htm 참조하여 진행하시면 됩니다.

    출처:http://cafe.naver.com/winadmins

    Mime Types

    인터넷정보2007. 10. 19. 14:51



    컨텐트 형식으로 본 MIME Type

    Type/sub-type Extension
    application/envoy evy
    application/fractals fif
    application/futuresplash spl
    application/hta hta
    application/internet-property-stream acx
    application/mac-binhex40 hqx
    application/msword doc
    application/msword dot
    application/octet-stream *
    application/octet-stream bin
    application/octet-stream class
    application/octet-stream dms
    application/octet-stream exe
    application/octet-stream lha
    application/octet-stream lzh
    application/oda oda
    application/olescript axs
    application/pdf pdf
    application/pics-rules prf
    application/pkcs10 p10
    application/pkix-crl crl
    application/postscript ai
    application/postscript eps
    application/postscript ps
    application/rtf rtf
    application/set-payment-initiation setpay
    application/set-registration-initiation setreg
    application/vnd.ms-excel xla
    application/vnd.ms-excel xlc
    application/vnd.ms-excel xlm
    application/vnd.ms-excel xls
    application/vnd.ms-excel xlt
    application/vnd.ms-excel xlw
    application/vnd.ms-outlook msg
    application/vnd.ms-pkicertstore sst
    application/vnd.ms-pkiseccat cat
    application/vnd.ms-pkistl stl
    application/vnd.ms-powerpoint pot
    application/vnd.ms-powerpoint pps
    application/vnd.ms-powerpoint ppt
    application/vnd.ms-project mpp
    application/vnd.ms-works wcm
    application/vnd.ms-works wdb
    application/vnd.ms-works wks
    application/vnd.ms-works wps
    application/winhlp hlp
    application/x-bcpio bcpio
    application/x-cdf cdf
    application/x-compress z
    application/x-compressed tgz
    application/x-cpio cpio
    application/x-csh csh
    application/x-director dcr
    application/x-director dir
    application/x-director dxr
    application/x-dvi dvi
    application/x-gtar gtar
    application/x-gzip gz
    application/x-hdf hdf
    application/x-internet-signup ins
    application/x-internet-signup isp
    application/x-iphone iii
    application/x-javascript js
    application/x-latex latex
    application/x-msaccess mdb
    application/x-mscardfile crd
    application/x-msclip clp
    application/x-msdownload dll
    application/x-msmediaview m13
    application/x-msmediaview m14
    application/x-msmediaview mvb
    application/x-msmetafile wmf
    application/x-msmoney mny
    application/x-mspublisher pub
    application/x-msschedule scd
    application/x-msterminal trm
    application/x-mswrite wri
    application/x-netcdf cdf
    application/x-netcdf nc
    application/x-perfmon pma
    application/x-perfmon pmc
    application/x-perfmon pml
    application/x-perfmon pmr
    application/x-perfmon pmw
    application/x-pkcs12 p12
    application/x-pkcs12 pfx
    application/x-pkcs7-certificates p7b
    application/x-pkcs7-certificates spc
    application/x-pkcs7-certreqresp p7r
    application/x-pkcs7-mime p7c
    application/x-pkcs7-mime p7m
    application/x-pkcs7-signature p7s
    application/x-sh sh
    application/x-shar shar
    application/x-shockwave-flash swf
    application/x-stuffit sit
    application/x-sv4cpio sv4cpio
    application/x-sv4crc sv4crc
    application/x-tar tar
    application/x-tcl tcl
    application/x-tex tex
    application/x-texinfo texi
    application/x-texinfo texinfo
    application/x-troff roff
    application/x-troff t
    application/x-troff tr
    application/x-troff-man man
    application/x-troff-me me
    application/x-troff-ms ms
    application/x-ustar ustar
    application/x-wais-source src
    application/x-x509-ca-cert cer
    application/x-x509-ca-cert crt
    application/x-x509-ca-cert der
    application/ynd.ms-pkipko pko
    application/zip zip
    audio/basic au
    audio/basic snd
    audio/mid mid
    audio/mid rmi
    audio/mpeg mp3
    audio/x-aiff aif
    audio/x-aiff aifc
    audio/x-aiff aiff
    audio/x-mpegurl m3u
    audio/x-pn-realaudio ra
    audio/x-pn-realaudio ram
    audio/x-wav wav
    image/bmp bmp
    image/cis-cod cod
    image/gif gif
    image/ief ief
    image/jpeg jpe
    image/jpeg jpeg
    image/jpeg jpg
    image/pipeg jfif
    image/svg+xml svg
    image/tiff tif
    image/tiff tiff
    image/x-cmu-raster ras
    image/x-cmx cmx
    image/x-icon ico
    image/x-portable-anymap pnm
    image/x-portable-bitmap pbm
    image/x-portable-graymap pgm
    image/x-portable-pixmap ppm
    image/x-rgb rgb
    image/x-xbitmap xbm
    image/x-xpixmap xpm
    image/x-xwindowdump xwd
    message/rfc822 mht
    message/rfc822 mhtml
    message/rfc822 nws
    text/css css
    text/h323 323
    text/html htm
    text/html html
    text/html stm
    text/iuls uls
    text/plain bas
    text/plain c
    text/plain h
    text/plain txt
    text/richtext rtx
    text/scriptlet sct
    text/tab-separated-values tsv
    text/webviewhtml htt
    text/x-component htc
    text/x-setext etx
    text/x-vcard vcf
    video/mpeg mp2
    video/mpeg mpa
    video/mpeg mpe
    video/mpeg mpeg
    video/mpeg mpg
    video/mpeg mpv2
    video/quicktime mov
    video/quicktime qt
    video/x-la-asf lsf
    video/x-la-asf lsx
    video/x-ms-asf asf
    video/x-ms-asf asr
    video/x-ms-asf asx
    video/x-msvideo avi
    video/x-sgi-movie movie
    x-world/x-vrml flr
    x-world/x-vrml vrml
    x-world/x-vrml wrl
    x-world/x-vrml wrz
    x-world/x-vrml xaf
    x-world/x-vrml xof


    파일 확장자로 본 Mime Types

    Extension Type/sub-type
      application/octet-stream
    323 text/h323
    acx application/internet-property-stream
    ai application/postscript
    aif audio/x-aiff
    aifc audio/x-aiff
    aiff audio/x-aiff
    asf video/x-ms-asf
    asr video/x-ms-asf
    asx video/x-ms-asf
    au audio/basic
    avi video/x-msvideo
    axs application/olescript
    bas text/plain
    bcpio application/x-bcpio
    bin application/octet-stream
    bmp image/bmp
    c text/plain
    cat application/vnd.ms-pkiseccat
    cdf application/x-cdf
    cer application/x-x509-ca-cert
    class application/octet-stream
    clp application/x-msclip
    cmx image/x-cmx
    cod image/cis-cod
    cpio application/x-cpio
    crd application/x-mscardfile
    crl application/pkix-crl
    crt application/x-x509-ca-cert
    csh application/x-csh
    css text/css
    dcr application/x-director
    der application/x-x509-ca-cert
    dir application/x-director
    dll application/x-msdownload
    dms application/octet-stream
    doc application/msword
    dot application/msword
    dvi application/x-dvi
    dxr application/x-director
    eps application/postscript
    etx text/x-setext
    evy application/envoy
    exe application/octet-stream
    fif application/fractals
    flr x-world/x-vrml
    gif image/gif
    gtar application/x-gtar
    gz application/x-gzip
    h text/plain
    hdf application/x-hdf
    hlp application/winhlp
    hqx application/mac-binhex40
    hta application/hta
    htc text/x-component
    htm text/html
    html text/html
    htt text/webviewhtml
    ico image/x-icon
    ief image/ief
    iii application/x-iphone
    ins application/x-internet-signup
    isp application/x-internet-signup
    jfif image/pipeg
    jpe image/jpeg
    jpeg image/jpeg
    jpg image/jpeg
    js application/x-javascript
    latex application/x-latex
    lha application/octet-stream
    lsf video/x-la-asf
    lsx video/x-la-asf
    lzh application/octet-stream
    m13 application/x-msmediaview
    m14 application/x-msmediaview
    m3u audio/x-mpegurl
    man application/x-troff-man
    mdb application/x-msaccess
    me application/x-troff-me
    mht message/rfc822
    mhtml message/rfc822
    mid audio/mid
    mny application/x-msmoney
    mov video/quicktime
    movie video/x-sgi-movie
    mp2 video/mpeg
    mp3 audio/mpeg
    mpa video/mpeg
    mpe video/mpeg
    mpeg video/mpeg
    mpg video/mpeg
    mpp application/vnd.ms-project
    mpv2 video/mpeg
    ms application/x-troff-ms
    mvb application/x-msmediaview
    nws message/rfc822
    oda application/oda
    p10 application/pkcs10
    p12 application/x-pkcs12
    p7b application/x-pkcs7-certificates
    p7c application/x-pkcs7-mime
    p7m application/x-pkcs7-mime
    p7r application/x-pkcs7-certreqresp
    p7s application/x-pkcs7-signature
    pbm image/x-portable-bitmap
    pdf application/pdf
    pfx application/x-pkcs12
    pgm image/x-portable-graymap
    pko application/ynd.ms-pkipko
    pma application/x-perfmon
    pmc application/x-perfmon
    pml application/x-perfmon
    pmr application/x-perfmon
    pmw application/x-perfmon
    pnm image/x-portable-anymap
    pot, application/vnd.ms-powerpoint
    ppm image/x-portable-pixmap
    pps application/vnd.ms-powerpoint
    ppt application/vnd.ms-powerpoint
    prf application/pics-rules
    ps application/postscript
    pub application/x-mspublisher
    qt video/quicktime
    ra audio/x-pn-realaudio
    ram audio/x-pn-realaudio
    ras image/x-cmu-raster
    rgb image/x-rgb
    rmi audio/mid
    roff application/x-troff
    rtf application/rtf
    rtx text/richtext
    scd application/x-msschedule
    sct text/scriptlet
    setpay application/set-payment-initiation
    setreg application/set-registration-initiation
    sh application/x-sh
    shar application/x-shar
    sit application/x-stuffit
    snd audio/basic
    spc application/x-pkcs7-certificates
    spl application/futuresplash
    src application/x-wais-source
    sst application/vnd.ms-pkicertstore
    stl application/vnd.ms-pkistl
    stm text/html
    svg image/svg+xml
    sv4cpio application/x-sv4cpio
    sv4crc application/x-sv4crc
    swf application/x-shockwave-flash
    t application/x-troff
    tar application/x-tar
    tcl application/x-tcl
    tex application/x-tex
    texi application/x-texinfo
    texinfo application/x-texinfo
    tgz application/x-compressed
    tif image/tiff
    tiff image/tiff
    tr application/x-troff
    trm application/x-msterminal
    tsv text/tab-separated-values
    txt text/plain
    uls text/iuls
    ustar application/x-ustar
    vcf text/x-vcard
    vrml x-world/x-vrml
    wav audio/x-wav
    wcm application/vnd.ms-works
    wdb application/vnd.ms-works
    wks application/vnd.ms-works
    wmf application/x-msmetafile
    wps application/vnd.ms-works
    wri application/x-mswrite
    wrl x-world/x-vrml
    wrz x-world/x-vrml
    xaf x-world/x-vrml
    xbm image/x-xbitmap
    xla application/vnd.ms-excel
    xlc application/vnd.ms-excel
    xlm application/vnd.ms-excel
    xls application/vnd.ms-excel
    xlt application/vnd.ms-excel
    xlw application/vnd.ms-excel
    xof x-world/x-vrml
    xpm image/x-xpixmap
    xwd image/x-xwindowdump
    z application/x-compress
    zip application/zip

    PHP

    html  테그를 뽑아서 value 값과 src, href 등의 속성값을 가져올 때 만들어놓고 쓰는 함수입니다.
    흐~ 안되는 정규식 삽질 해가며 만들어놓았던 기억이.. ㅋㅋ
    암턴.. 뭐~ 더 이뿌게 확실한 결과를 뽑아오는 방법이 있으시다면 PASS~

        function getPrefixValue($sContents, $sPrefix = 'value')
        {
            unset($xValue);

            $sPattern = '/[\s]+'.$sPrefix.'[\s]*=[\s]*(?:\"([^\"]*)\"|\'([^\']*)\'|([^\'\">\s]+))/i';
            $bMatch = preg_match($sPattern, $sContents, $aResult);

            if ( $bMatch ) {
                $iValue = count($aResult) - 1;
                $xValue = $aResult[$iValue];
            } else {
                $xValue = null;
            }

            return $xValue;
        }



    JS
    <script type="text/javascript">
      <!--
        function getAttribute(tag, att)
        {
            var g = document.getElementsByTagName(tag);
            for(i=0;i<g.length;i++)
            {
                alert(eval('g['+i+'].'+att));

            }
        }
      //-->
      </script>

    <body>
      <a href="http://www.phpschool.com" target="_blank">phpschool</a>
     </body>
    <script type="text/javascript">
    <!--
        getAttribute('a','href'); /* tag이름, 속성*/
    //-->
    </script>


    색상표, 색상코드, 컬러 테이블, 색상선택기, 컬러표




    http://oxtag.com/html/ex/colorcode/colorcode01.html




    http://oxtag.com/html/rgbcolor.htm

    유니코드 및 아스키코드, 특수문자 변환기, 한글자모(HANGUL JAMO0, HANGUL COMPATIBILITY) - 너를사랑해너를사랑해


    http://oxtag.com/php/p/unicode/unicode.php


    유니코드 및 아스키코드, 특수문자 변환기















    블로그방문자 두배 늘리기 무료홈페이지 등록하기
    트래픽증가를 위한 처음 조치

    1. 구글


    일단은 구글에 어카운트 (계정)이 하나 있어야 합니다. http://www.google.com에 가서 하나 만듭니다. 그다음에는 다음 웹으로 이동하십시오.

    https://www.google.com/webmasters/tools/siteoverview

    자신의 사이트를 등록합니다.
    예를들어 자신의 티스토리가 jubiya.tistory.com 이라면
    http://jubiya.tistory.com으로 입력하시면 등록이 됩니다.

    자신의 계정임을 증명하기 위해서 두가지 방법이 있습니다. 하나는 특정 html 파일을 올리는 것이고 다른 하나는 메타 태그를 입력하는 것입니다. 티스토리가 자신의 스킨을 변경할 수 있게 해주므로 메타 태그를 입력하는 방법을 선택합니다.
    티스토리의 자신의 계정에서 스킨편집을 선택하시고 아래 메타태그 (진한 파란색)를 구글 증명방법에서 복사하셔서 카피해 넣으면 됩니다.

    (메타태그는 구글에서 제공해줍니다. 그 메타태그를 붙여주시면 됩니다)

    !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta name="verify-v1" content="5lZuLJjCfep1l/jVweEzbzrStssUo8=" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="alternate" type="application/rss+xml" title="" href="" />
    <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
    <link rel="stylesheet" media="print" type="text/css" href="./images/print.css" />
    <link rel="shortcut icon" href="favicon.ico" />
    <title> :: </title>
    </head>

    그 다음 부터는 자신의 티스토리 계정에 대한 여러 정보를 얻을 수 있답니다.


    2. 야후

    야후계정을 만들어야 합니다. 그 다음에는 다음 사이트로 가서
    https://siteexplorer.search.yahoo.com/submit
    자신의 티스토리 계정을 입력합니다.

    다음에는 다음 사이트로 가서
    https://siteexplorer.search.yahoo.com/mysites
    자신의 티스토리 계정을 입력하고 증명 방법으로 메타태그를 선택해서 아래에 보이는 진한파란색 부분을 입력합니다.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <META name="y_key" content="120423a6f6685f87" /> <!- yahoo>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="alternate" type="application/rss+xml" title="" href="" />
    <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
    <link rel="stylesheet" media="print" type="text/css" href="./images/print.css" />
    <link rel="shortcut icon" href="favicon.ico" />
    <title> :: </title>
    </head>


    3. MSN

    MSN은 아래 사이트에 가서 자신의 티스토리 주소를 입력하면 됩니다.
    http://search.msn.com/docs/submit.aspx



    4. 네이버

    네이버는 아래 사이트에 가서
    http://blogsearch.naver.com/

    아래에 보시는 것 처럼 "Feed 등록"을 눌러서 자신의 티스토리계정과 사유를 간단하게 적으면 됩니다.

    출처 : http://jubiya.tistory.com/121




    그외...
    원본링크 : http://www.bloggertip.com/entry/register-various-homepage-to-raise-traffic
    출처 : http://www.bloggertip.com/

    1. 구글 홈페이지 등록 http://www.google.co.kr/intl/ko/add_url.html
    2. 네이버 홈페이지 등록 http://submit.naver.com/
    3. 다음 홈페이지 등록
    http://help.search.daum.net/help/register.html
    4. 야후 홈페이지 등록 https://kr.suggest.yahoo.com/guide/guide_normal.php
    5. 엠파스, 네이트 홈페이지 등록 http://add.empas.com/regi2.html
    6. 파란 홈페이지 등록 http://add.paran.com/normal_info.php
    7. 드림위즈 홈페이지 등록 http://request.dreamwiz.com/BIN/register.cgi?
    8. 하나포스 홈페이지 등록 http://adsearch.hanafos.com/ad/searchad_gsite_01.asp
    9. 천리안 홈페이지 등록 http://dir.chol.com/service/request/reqregister.php
    10. MSN 홈페이지 등록 http://search.msn.co.kr/docs/submit.aspx?FORM=WSDD2




    구글 애드센스가 티스토리에 많이 보급되어 있습니다. 블로그를 쓰면서 작은 돈이지만 조금이나마 벌 수 있다는 것은 좋은 일이라 생각됩니다. 제도 사실은 재미삼아 시작했었는데 최근에는 조금 과한 느낌이 들어서 자제를 생각중입니다. (폐인되면 낭패라서요). 제가 보고배운 노하우를 다른 사람들과 나누고자 이글을 적습니다. 도움이 되실 바랍니다.

    혹시 구글애드센스를 어떻게 티스토리에 설치하는 지 모르시는 분은 구글애드센스 티스토리에 설치 글을 읽어보시고, 설치한 다음에, 자신의 블로그를 여러가지 검색엔진에 등록하는 방법을 보기싶으면 티스토리 웹 검색엔진에 등록하기 글을 참고하세요.

    블로그 상단 메뉴바로 아래에 넣는 방법

    제 포스트를 보고 구글 애드센스를 추가하시는 듯합니다. 그분들중 블로그 메인메뉴아래에 구글 애드센스 광고 넣은 방법에 대해 질문하신분이 있어서 그 방법을 여기에 추가합니다.
    사용자 삽입 이미지

    블로그 상단의 메뉴아래에 구글광고를 넣을려면 제가 사용하고 있는 스킨의 경우 <!-- /wrapMenu --> 아래 부분에 구글광고를 넣으시면 됩니다. 저는 728x90 텍스트 광고를 사용했습니다. 녹색이 제가 첨가한 코드이고 빨간색 부분이 애드센스 광고입니다.

     <!-- /wrapMenu -->
    <center><script type="text/javascript"><!--
    google_ad_client = "pub-pub-97428OOO545898";
    google_alternate_color = "FFFFFF";
    google_ad_width = 728;
    google_ad_height = 90;
    google_ad_format = "728x90_as";
    google_ad_type = "text";
    //2007-04-30: GL-Top
    google_ad_channel = "2286295348";
    google_color_border = "FFFFFF";
    google_color_bg = "FFFFFF";
    google_color_link = "191919";
    google_color_text = "666666";
    google_color_url = "0066CC";
    //-->
    </script>
    <script type="text/javascript"
      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></center>

                </div><!-- /header -->


    본문안에 들어 있는 네모 (스퀘어) 광고를 넣는 방법


    사용자 삽입 이미지

    위와 같이 하실려면, 티스토리의 스킨편집으로 들어가셔서 <div class="article">[#&#_article_rep_desc_#&#] (Note: & & 를 제외한 문자열) 을 찾으신후 아래에 있는 코드를 복사해서 그 사이에 넣으시면 됩니다. 빨간색으로 된 부분은 본인의 구글광고로 대체되어야합니다. 이 예제의 경우는 200x200 스퀘어 광고를 사용했습니다.

     
    <div class="article"><br/>

    <table width="200" height="200" align="right" border="0" cellpadding="0" cellspacing="0" style='background-image:url();background-repeat:no-repeat;'>
    <tr>
    <td valign="top" style="padding-top:0px; padding-left:5px;">
    <script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_alternate_color = "FFFFFF";
    google_ad_width = 200;
    google_ad_height = 200;
    google_ad_format = "200x200_as";
    google_ad_type = "text";
    //2007-04-30: GL-Square
    google_ad_channel = "778OO57358";
    google_color_border = "FFFFFF";
    google_color_bg = "FFFFFF";
    google_color_link = "191919";
    google_color_text = "666666";
    google_color_url = "0066CC";
    //-->
    </script>
    <script type="text/javascript"
      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    </td></tr>
    </table>

                                [#&#_article_rep_desc_#&#] (주석: && 없는 문자열)




    본문아래에 테이블 형식으로 배치하는 법

    아래 그림에서 보는 것처럼 본문아래 (이올린에 북마크하기 / 이올린에 추천하기)에 테이블 형식으로 넣는 방법을 소개합니다.
    사용자 삽입 이미지

    아래에서 보시는 것처럼 티스토리 스킨편집 모드로 가셔서
    [#&#_article_rep_desc_#&#] (주석: && 없는 문자열)의 아래에 다음 코드를 복사하신다음 빨간색으로 되어있는 구글광고코드를 자신의 것으로 넣으시면 됩니다.  이 예제의 경우 두개의 리퍼러광고는 125x125모드를  텍스트 광고는 336x280를 이용했습니다.
     

    [#&#_article_rep_desc_#&#] (주석: && 없는 문자열)
                               
    <center>
    <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="490" height="280">

    <tr>
    <td width="130" height="102″">
    <script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_ad_width = 125;
    google_ad_height = 125;
    google_ad_format = "125x125_as_rimg";
    google_cpa_choice = "CAAQt62dzgEaCCyj16F576O9KI3J93MwAA";
    google_ad_channel = "0102647977";
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></td>

    <td width="346" rowspan="2">
    <script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_alternate_color = "FFFFFF";
    google_ad_width = 336;
    google_ad_height = 280;
    google_ad_format = "336x280_as";
    google_ad_type = "text";
    //2007-05-02: GL-Bottom
    google_ad_channel = "3949400188";
    google_color_border = "FFFFFF";
    google_color_bg = "FFFFFF";
    google_color_link = "333333";
    google_color_text = "4C4C4C";
    google_color_url = "0066CC";
    //-->
    </script>
    <script type="text/javascript"
      src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></td>
    </tr>

    <tr>
    <td width="130" height="102″">
    <script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_ad_width = 125;
    google_ad_height = 125;
    google_ad_format = "125x125_as_rimg";
    google_cpa_choice = "CAAQ18vnzwEaCJIAA2r9-wpSKJu893MwAA";
    google_ad_channel = "0102647977";
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    </td>
    </tr>
    </table>
    </center>

    ☆ Computer Tips ☆ 박스를 이용한 광고

    최근에 인기가 높아진 형태의 광고라 생각됩니다.  아래그림에서 보듯이 필요한 설명을 덧붙인후 리퍼러 광고를 첨가한 것입니다. 일단 박스가 들어가서 훨씬 깔끔하게 보이지요.

    사용자 삽입 이미지

    아래에서 보시는 것처럼 티스토리 스킨편집 모드로 가셔서 원하는 곳에 아래에 다음 코드를 복사하신다음 빨간색으로 되어있는 구글광고코드를 자신의 것으로 넣으시면 됩니다.  이 예제의 경우 텍스트 리퍼러 광고들을 이용했고 태그 바로 위에 배치했습니다.


    <fieldset style="text-align: left; margin: 0; padding: 3px" border="0">
    <legend style="margin: 0; padding: 0">☆ Computer Tips ☆</legend>
    <p>인터넷 익스플로어만 사용하세요. 이기회에<b><script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_ad_output = "textlink";
    google_ad_format = "ref_text";
    google_cpa_choice = "CAAQxc-1_wEaCDLs9CQDN-gEKM244YcBMAA";
    google_ad_channel = "0102647977";
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></b></p>

    <p>컴퓨터를 새로 설치하셨다면<b><script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_ad_output = "textlink";
    google_ad_format = "ref_text";
    google_cpa_choice = "CAAQuI3ImwIaCOQlo6bk5q9kKJT5uYsBMAA";
    google_ad_channel = "0102647977";
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></b></p>

    <p>웹사이트나 블로그를 운영하고 계시면, 이기회에<b>
    <script type="text/javascript"><!--
    google_ad_client = "pub-97428OOO545898";
    google_ad_output = "textlink";
    google_ad_format = "ref_text";
    google_cpa_choice = "CAAQudi1_wEaCD9511_7fnUFKIGN4YcBMAA";
    google_ad_channel = "0102647977";
    //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></b></p>
    </fieldset><br/>
    <! end of referral ad>

    <s_tag_label>
                                <div class="tagTrail">
                                    <img src="./images/entryTag.gif" alt="Tag" /> [#&#_tag_label_rep_#&#] (주석: && 없는 문자열)

                                </div>
                            </s_tag_label>


    혹시 더 궁금한 점이 있으면 댓글로 질문남기시면 아는 범위내에서 설명해 드리겠습니다. 좋은 블로그 생활하시길 바랍니다.


    출처: http://lifeisgood.tistory.com/261




    연속선택상자를 구현해 보았다. (사용예)
    자바스트립트에서 역시 prototype.js를 사용했다. 이것 쓸수록 중독이 되는 것 같다.

    아래 관련 소스 코드

    chain_select.js (Language : javascript)
    /************************************************************
     * 연속선택박스
     * 홈페이지 : http://asam.pe.kr
     * 수정일 : 2007-10-04
     * 작성자 : 아삼
     ************************************************************/


    ChainSelect = function(cs_data,x_url) {
        this.cs_data = cs_data;  // 변경될 SELECT박스 데이타
        this.init_cs_data = {};  // 초기화 SELECT박스 데이타
        this.x_url = x_url;         // 정보를 얻어올 페이지
        this.sids = [];    // 관련 SELECT박스 아이디 배열
       
        // sids정보, SELECT박스 초기화
        for(sid in this.cs_data) {
            this.sids.push(sid);
            this.init_cs_data[sid] = cs_data[sid];
            this.set_select_box(sid);
        }
       
        // change 이벤트, 마지막 제외
        for(var i=0; i<this.sids.length-1; i++) {
            Event.observe(this.sids[i], 'change', this.x_set_select_box.bindAsEventListener(this));
        }
    }

    ChainSelect.prototype = {
        //// 변경된 다음 항목 목록을 가져 옮
        x_set_select_box: function(event) {
            var event_id = Event.element(event).id;
            var params = $H();
            var init_flag = false;
            for(var i=0; i<this.sids.length; i++) {
                params[this.sids[i]] = $F(this.sids[i]);
                if(this.sids[i] == event_id) {
                    params['event_id'] = this.sids[i];
                    init_flag = true;
                }
                else if(init_flag) {
                    this.cs_data[this.sids[i]] = this.init_cs_data[this.sids[i]];
                    this.set_select_box(this.sids[i]);
                }
            }
            var o_ms = this;
            new Ajax.Request(this.x_url, {
                method: 'post',
                encoding: '',
                parameters: params,
                onSuccess: function(transport) {
                    var tmp = transport.responseText.evalJSON(true);
                    o_ms.cs_data[tmp.change_id] = tmp.list;
                    o_ms.set_select_box(tmp.change_id);
                }
            });
        },
       
        //// SELECT박스 데이타 갱신
        set_select_box: function(sid) {
            var select_box = $(sid);
            var value_str = '';
            select_box.innerHTML = '';
            for(var i=0; i<this.cs_data[sid].length; i++) {
                var o_option = document.createElement("option");
                select_box.options.add(o_option);
                o_option.value = this.cs_data[sid][i][0];
                o_option.innerHTML = this.cs_data[sid][i][1];
            }
        }
    }

    http://asam.pe.kr/test/chain_select/x_biz_list.php?biz1=1&event_id=biz1 와 같은 요청시
    다음과 같이 반환하는 페이지(x_biz_list.php,x_zone_list.php)를 구현한다.

    {"change_id":"biz2","list":[["","선택하세요"],["21","가구"],["25","가족"],["20","결혼"],["27","노인"],["31","분실물센터"],["26","상담"],["16","생활용품"],["23","선물, 팬시"],["29","여성"],["24","욕실용품"],["17","유아, 어린이"],["19","장례"],["22","주방용품"],["18","청소, 세탁"],["28","청소년"],["30","친목, 모임"],["32","패션, 미용"]]}
    x_biz_list.php (Language : php)
    <?php
    header("Content-Type: text/html; charset=euc-kr");
    $biz1 = iconv("utf-8", "euc-kr", $_REQUEST['biz1']);
    $biz2 = iconv("utf-8", "euc-kr", $_REQUEST['biz2']);
    $biz3 = iconv("utf-8", "euc-kr", $_REQUEST['biz3']);
    $biz4 = iconv("utf-8", "euc-kr", $_REQUEST['biz4']);
    $biz5 = iconv("utf-8", "euc-kr", $_REQUEST['biz5']);
    $event_id = iconv("utf-8", "euc-kr", $_REQUEST['event_id']);
    include_once 'db_config.php';
    include_once 'json_encode.php';
    include_once 'DB.php';
    $db =& DB::connect($DSN);
    $list = array();
    $sql'SELECT id , name '.
            'FROM biz_dirs '.
            'WHERE p_id=? '.
            'ORDER BY name';

    switch($event_id) {
    case 'biz1':
        if(is_numeric($biz1) && $biz1 > 0) $list = $db->getAll($sql, array($biz1));
        $change_id = 'biz2';
        break;
    case 'biz2':
        if(is_numeric($biz2) && $biz2 > 0) $list = $db->getAll($sql, array($biz2));
        $change_id = 'biz3';
        break;
    case 'biz3':
        if(is_numeric($biz3) && $biz3 > 0) $list = $db->getAll($sql, array($biz3));
        $change_id = 'biz4';
        break;
    case 'biz4':
        if(is_numeric($biz4) && $biz4 > 0) $list = $db->getAll($sql, array($biz4));
        $change_id = 'biz5';
        break;
    }
    if($change_id != '') {
        if(count($list) > 0) array_unshift($list, array('','선택하세요'));
        else array_unshift($list, array('','----------'))
        echo json_encode2(array('change_id'=>$change_id,'list'=>$list));
    }
    //// DB연결 종료
    $db->disconnect();
    ?>



    x_zone_list.php (Language : php)
    <?php
    header("Content-Type: text/html; charset=euc-kr");
    $zone1 = iconv("utf-8", "euc-kr", $_REQUEST['zone1']);
    $zone2 = iconv("utf-8", "euc-kr", $_REQUEST['zone2']);
    $event_id = iconv("utf-8", "euc-kr", $_REQUEST['event_id']);
    include_once 'db_config.php';
    include_once 'json_encode.php';
    include_once 'DB.php';
    $db =& DB::connect($DSN);
    switch($event_id) {
    case 'zone1':
        $sql'SELECT zone2 v, zone2 t '.
                'FROM zipcodes '.
                'WHERE zone1=? '.
                'GROUP BY zone2';
        $list = $db->getAll($sql, array($zone1));
        array_unshift($list, array('','--구 선택--'));
        $change_id = 'zone2';
        break;
    case 'zone2':
        $sql'SELECT zone3 v, zone3 t '.
                'FROM zipcodes '.
                'WHERE zone2=? AND zone1=? AND zone3\!=? '.
                'GROUP BY zone3';
        $list = $db->getAll($sql, array($zone2,$zone1,''));
        array_unshift($list, array('','--동 선택--'));
        $change_id = 'zone3';
        break;
    }
    if($change_id != '') {
        echo json_encode2(array('change_id'=>$change_id,'list'=>$list));
    }
    //// DB연결 종료
    $db->disconnect();
    ?>

    http://blog.asam.pe.kr/13

    네이버 카테고리 탐색기 흉내를 내보았다.
    다음 구현 코드는 Pear::DB, prototype.js에 의존적인 코드이다.
    행복한고니님의 json_encode함수를 사용했다.

    자바스크립트에서 init함수와 dir함수가 많은 부분 중복되고 템플릿이 되는 문자열에 xdir이란 객체가 직접 쓰여서 코드가 꼬이는 것 같아 불만은 있지만 나의 내공으로는 도저히...ㅠ.ㅠ
     

    카테고리 table 설계는 다음과 같다.
    (Language : text)
    +----------+
    | biz_dirs |
    +------------------------------------------------------------+
    p>  id        : 고유번호
        name      : 이름,타이틀
    k>  p_id      : 부모번호
        type      : 0x1:디렉토리, 0x2:가상디렉토리 ...
        child_cnt : 하위 노드수
        real_id   : 가상일 때 링크된 실제 디렉토리 번호
    +------------------------------------------------------------+



    x_dir_list.php (Language : php)
    <?php
    header("Content-Type: text/html; charset=euc-kr");
    $id = iconv("utf-8", "euc-kr", trim($_GET['id']));
    if(!is_numeric($id)) exit;
    include_once 'json_encode.php';
    include_once 'DB.php';
    //// DB연결 정보
    $DSN = array(
        'phptype'=>'mysql',
        'username'=>'xxx_id',
        'password'=>'xxx_pw',
        'hostspec'=>'xxx.xxx.xxx.xxx',
        'database'=>'xxx_db'
    );
    //// DB연결
    $db =& DB::connect($DSN);
    $data = array();
    $sql
    = 'SELECT name FROM biz_dirs WHERE id=?';
    $data['name'] = $db->getOne($sql, array($id));
    $sql = 'SELECT id, name, type, child_cnt, real_id FROM biz_dirs WHERE p_id=?';
    $data['subs'] = $db->getAll($sql, array($id), DB_FETCHMODE_ASSOC);
    //// DB연결 종료
    $db->disconnect();
    echo json_encode2($data);
    ?>


    xdir.js (Language : javascript)
    XDir = function(path) {
        this.data = {};
        this.path = path;
        this.xdir_url = 'x_dir_list.php';
        this.expand_icon = '<img src="/test/img/icn_plus.gif" />';
        this.close_icon = '<img src="/test/img/icn_minus.gif" />';
        this.leaf_icon = '<img src="/test/img/icn_nosub.gif" />';
        this.tpls = {
            'close_head': new Template('<a onclick="xdir.close(\'#{id}\')">#{icon}</a> <a href="javascript:dir(#{id})">#{name}</a>'),
            'expand_head': new Template('<a onclick="xdir.dir(\'#{id}\')">#{icon}</a> <a href="javascript:dir(#{id})">#{name}</a>'),
            'trank_node': new Template('<div id="dir_head_#{id}" style="margin-left:10px"><a onclick="xdir.dir(\'#{id}\')">#{icon}</a> <a href="javascript:dir(#{id})">#{name}</a></div><div id="dir_box_#{id}" style="margin-left:10px"><img height="1" /></div>'),
            'leaf_node': new Template('<div id="dir_head_#{id}" style="margin-left:10px">#{icon} <a href="javascript:dir(#{id})">#{name}</a></div><div style="margin-left:10px"><img height="1" /></div>')
        }
    }
    XDir.prototype = {
        init: function() {
            var id = this.path.shift();
            if(id == undefined) return;
            if(id != '0') {
                if($('dir_head_'+id) == null) return;
                $('dir_head_'+id).innerHTML = 'Loading...';
            }
            if(this.data[id] == undefined) {
                var o_xdir = this;
                new Ajax.Request(this.xdir_url, {
                    method: 'get',
                    encoding: '',
                    parameters: {'id': id},
                    onSuccess: function(transport) {
                        o_xdir.data[id] = transport.responseText.evalJSON(true);
                        o_xdir.expand(id);
                        o_xdir.init();
                    }
                });
            }
            else {
                this.expand(id);
                this.init();
            }
        },
        dir: function(id) {
            if(id != '0') {
                if($('dir_head_'+id) == null) return;
                $('dir_head_'+id).innerHTML = 'Loading...';
            }
            if(this.data[id] == undefined) {
                var o_xdir = this;
                new Ajax.Request(this.xdir_url, {
                    method: 'get',
                    encoding: '',
                    parameters: {'id': id},
                    onSuccess: function(transport) {
                        o_xdir.data[id] = transport.responseText.evalJSON(true);
                        o_xdir.expand(id);
                    }
                });
            }
            else {
                this.expand(id);
            }
        },

        expand: function(id) {
            var str = '';
            var list = this.data[id]['subs'];
            var name = this.data[id]['name'];
            for(var i=0; i<list.length; i++) {
                str += this.get_node_str(list[i]);
            }
            if($('dir_box_' + id) == null) return;
            $('dir_box_' + id).innerHTML = str;
            if(id != '0') $('dir_head_' + id).innerHTML = this.get_close_head_str(id, name);
        },
       
        close: function(id) {
            var name = this.data[id]['name'];
            $('dir_head_' + id).innerHTML = this.get_expand_head_str(id, name);
            $('dir_box_' + id).innerHTML = '<img height="1" />';
        },
       
        get_close_head_str: function(id, name) {
            return this.tpls.close_head.evaluate({'id':id,'icon': this.close_icon,'name':name});
        },
       
        get_expand_head_str: function(id, name) {
            return this.tpls.expand_head.evaluate({'id':id,'icon': this.expand_icon,'name':name});
        },
       
        get_node_str: function(dir) {
            var s_tpl = '';
            var s_node = '';
            var name = (dir.type=='2') ? dir.name + '@' : dir.name;
            var icon = (parseInt(dir.child_cnt) > 0) ? this.expand_icon : this.leaf_icon;
            var tpl_data = {'id':dir.id, 'name':name, 'icon': icon};
            if(parseInt(dir.child_cnt) > 0) {
                return this.tpls.trank_node.evaluate(tpl_data);
            }
            return this.tpls.leaf_node.evaluate(tpl_data);
        }
    }


    function dir(id) {
        alert('카테고리 id(' + id + ') 구현 페이지로 이동');
    }
     


    사용예 : http://asam.pe.kr/test/dir_test.php

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function validate(field) {
    var valid = "abcdefghijklmnopqrstuvwxyz0123456789"
    var ok = "yes";
    var temp;
    for (var i=0; i<field.value.length; i++) {
    temp = "" + field.value.substring(i, i+1);
    if (valid.indexOf(temp) == "-1") ok = "no";
    }
    if (ok == "no") {
    alert("영문자와 숫자만 입력할 수 있습니다");
    field.focus();
    field.select();
       }
    }
    //-->
    </script>

    <!------------------------- 여기까지 ---------------------------------->

    </HEAD>

    <BODY>

    <!---- [2단계] 아래의 방법으로 원하는 위치에 복사 해 넣으세요 ------------------>

    <form>
    아이디 <input type=text name="entry" onBlur="validate(this)">
    <input type=submit>
    <br><br>
    ※ 아이디는 영문자나 숫자만 가능합니다
    </form>

    <!------------------------- 여기까지 ---------------------------------->

    [펌]

    역시 학교에서 "곤" 님의 글을 퍼옴

    긴 제목 자르는 과정을 html 로 간단히 해결할수도 있다는.....   호호. .멋짐

    //=============================================
    방금 올렸다가, PHPSchool의 사이트 형태가 지연 랜더링 방식이라
    버그가 있어서 다시 고쳐서 올립니다. (setTimeout 방식으로 바꿈)
    확정 랜더링 방식이면 이런 수고는 하지 않아도 되는뎅...
    <br><br>
    레이아웃에서 가변크기 테이블 영역을 안쓰면 setTimeout을 걸지
    않고도 바로 적용 가능하지만, PHPSchool의 경우에는 디스플레이
    되면서 그 크기가 정해지는 것이 대부분인지라 일단 레이아웃들의
    좌표가 고정되고 난 다음에 정확한 판단을 지원하기 위해
    일부러 1초간의 지연을 뒀습니다.
    <br><br>
    게다가 자바스크립트 들어가는 부분에 들여쓰기 하면 전부 특수문자가
    공백으로 바껴서 에러가 나는군요.
    <br><br>
    무려 한시간 동안의 msdn과의 사투 끝에,
    비슷하게 흉내내는데는 성공했습니다. 약간 어색하게 보이는 면이
    없지않지만...
    <br><br>
    아래의 테이블은 일부 넘치는 것과 안넘치는 것이 있습니다.
    소스보기로 확인해 보시면 그 원래 길이를 알 수 있을겁니다.
    <br><br>
    대신 넷스케이프 쪽은 현재로선 포기입니다. ㅡ.ㅡ;
    하지만, 불가능한건 아니라고 봅니다만, 들어가는 노력에 비해
    얻어지는 효과가(넷스케이프 사용자의 비율이.. 쿨럭)...
    </p>

    <table border=1>
    <tr><th>No</th><th>제 목</th><th>작성자</th></tr>
    <tr><td>1</td><td width=380><span id=line1 style="vertical-align:top;display:inline-block;width:350;height:18;overflow:hidden">꼭 이렇게 제목을 길게 써야지만 직성이 풀리는 유별난 사람들이 많은 모양이예요.</span><span id=line1ellipsis style="height:18;display:none">...</span></td><td>곤</td></tr>
    <tr><td>2</td><td width=380><span id=line2 style="vertical-align:top;display:inline-block;width:350;height:18;overflow:hidden">이렇게 짧게 써도 되는데</span><span id=line2ellipsis style="height:18;display:none">...</span></td><td>곤</td></tr>
    <tr><td>3</td><td width=380><span id=line3 style="vertical-align:top;display:inline-block;width:350;height:18;overflow:hidden">나도 길게 쓸래. 짧게 쓰면 뭔가 허전해서 말이쥐, 왜냐구? 내맘이지 모야!</span><span id=line3ellipsis style="height:18;display:none">...</span></td><td>곤</td></tr>
    <tr><td>4</td><td width=380><span id=line4 style="vertical-align:top;display:inline-block;width:350;height:18;overflow:hidden">짧게 좀 씁시다. 잘 안보이자나여.</span><span id=line4ellipsis style="height:18;display:none">...</span></td><td>곤</td></tr>
    <tr><td>5</td><td width=380><span id=line5 style="vertical-align:top;display:inline-block;width:350;height:18;overflow:hidden">제목 길게 쓰면 누가 알아나 주나? 제발 좀 제목은 간단하게 쓰라구! 누가 본다고.. 쯧쯧</span><span id=line5ellipsis style="height:18;display:none">...</span></td><td>곤</td></tr>
    </table>
    <script language="JavaScript">
    function showEllipsis() {
    for (i = 1; i <= 5; i++) {
    if (eval("line"+i+".scrollHeight") >= 24) {
    ellipsis = eval("line" + i + "ellipsis");
    ellipsis.style.display = "inline-block";
    }
    }
    }
    setTimeout("showEllipsis()",1000);
    </script>

    @ : 나
    # 3개... 괴물
    % : 먹을거...


    <script language='javascript'>
    <!--
    var y=100;
    var x=100;
    var x1,y1;
    var e_x=700;
    var e_y=700;
    var e_x1=700;
    var e_y1=700;
    var e_x2=700;
    var e_y2=700;
    var time=null;
    var time2=null;
    var time3=null;
    var eat_val=null;
    var cnt=0;

    function create_eat()
    {
        x1=Math.floor(Math.random()*59+1);
        y1=Math.floor(Math.random()*59+1);
        
        eat.style.left=x1*10;
        eat.style.top=y1*10;
        
        eat.innerHTML="%";
    }

    function key_enter()
    {
        key=event.keyCode;

        if (key==37) x-=10;
        if (key==38) y-=10;
        if (key==39) x+=10;
        if (key==40) y+=10;
        
        if (x<0) x=600
        if (y<0) y=600;
        if (y>600) y=0;
        if (x>600) x=0;
        
        my.style.top=y;
        my.style.left=x;
        
        if (x1*10==x && y1*10==y)
        {
            cnt++;
            sc.innerHTML="점수 : "+cnt;
            
            create_eat();
        }
        
        if (eat_val==null)
        {
            eat_val="ok";
            create_eat();
        }
    }

    function end_game()
    {
        clearInterval(time);
        time=null;
        clearInterval(time2);
        time2=null;
        clearInterval(time3);
        time3=null;
        alert('잡혔당..ㅋㅋㅋ');
    }

    function start_enemy()
    {
        if (e_x>x) e_x-=2;
        if (e_x<x) e_x+=2;
        if (e_y>y) e_y-=2;
        if (e_y<y) e_y+=2;
        
        enemy.style.top=e_y;
        enemy.style.left=e_x;

        if (e_x==x && e_y==y) end_game();
    }

    function start_enemy2()
    {
        if (e_x1>x) e_x1-=2;
        if (e_x1<x) e_x1+=2;
        if (e_y1>y) e_y1-=2;
        if (e_y1<y) e_y1+=2;
        
        enemy1.style.top=e_y1;
        enemy1.style.left=e_x1;

        if (e_x1==x && e_y1==y) end_game();
    }

    function start_enemy3()
    {
        if (e_x2>x) e_x2-=2;
        if (e_x2<x) e_x2+=2;
        if (e_y2>y) e_y2-=2;
        if (e_y2<y) e_y2+=2;
        
        enemy2.style.top=e_y2;
        enemy2.style.left=e_x2;

        if (e_x2==x && e_y2==y) end_game();
    }

    time=setInterval("start_enemy()",15);
    time2=setInterval("start_enemy2()",25);
    time3=setInterval("start_enemy3()",50);
    document.onkeydown=key_enter;
    //-->
    </script>
    <div id='my' style='position:absolute; left:100; top:100'>@</div>
    <div id='enemy' style='position:absolute; left:700; top:700'>#</div>
    <div id='enemy1' style='position:absolute; left:700; top:700'>#</div>
    <div id='enemy2' style='position:absolute; left:700; top:700'>#</div>
    <div id='eat' style='position:absolute;'></div>
    <div id='sc' style='position:absolute; left:0; top:600'>점수 : 0</div>

    <form name=fffff>

    <textarea name=t cols=40 rows=20>여따 뭐쓰고~</textarea>

    <input type=button value='눌러' onclick="testLy.innerHTML=this.form.t.value">

    </form>

    <div id="testLy" style="background-color:rgb(204,204,204); width:200px; height:200px; position:absolute; left:383px; top:51px; z-index:1; layer-background-color:rgb(204,204,204); ">
        메롱
    </div>










    곰표  
    <!----
    별다른건 없고....
    자동 포커스 이동할때는 onkeydown이나 onkeypress 가 아닌 onkeyUp이라는 이벤트핸들러를 쓴다는것만 기억하면.....
    --->


    <script>

    //주민 번호 체크
    function resnoCheck(no){ //13자리의 제대로 된 로직의 주민등록 번호 인가 체크

            if(no.length !=13)
                    {
                    alert(no.length + '자 의 주민등록번호네요. 주민번호는 총 13자리 입니다 ')
                    document.f.resno1.focus();
                    return false;
                    }
            else
            {
            var a=Array(13)

                    for(var i=0;i<13;i++)
                    {
                    a[i]=parseInt(no.charAt(i));
                    }
            var sum=(a[0]*2)+(a[1]*3)+(a[2]*4)+(a[3]*5)+(a[4]*6)+(a[5]*7)+(a[6]*8)+(a[7]*9)+(a[8]*2)+(a[9]*3)+(a[10]*4)+(a[11]*5);
            var ssnave =11 - (sum % 11);
            if(ssnave == 11) ssnave = 1;
            else if(ssnave == 10) ssnave = 0;

            if(a[12]!=ssnave)
                    {
                    alert('잘못된 주민등록 번호입니다')
                    document.f.resno1.focus();
                    return false;
                    }
            else return true;
            }


    }// end of function


    //submit 체크
    function check()
    {

    var f = document.f;

            if(!f.nm.value) {

            alert('이름을 입력하세요');
            f.nm.focus();
            return false;
            }

    var resno = f.resno1.value + "" + f.resno2.value;


            if(!resnoCheck(resno) ) return false;
           
            f.submit();
           
    }


    //곰표 주민 등록 번호 자동 포커싱 함수
    function autoFocus(inputForm,limit,nextForm) // void , 인자값(입력중인 폼값,글자수,다음 이동할 폼)
    {

            if(inputForm.value.length == limit )        nextForm.focus();


    }
    </script>
    </head>

    <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
    <form name=f onSubmit="return check()" action=resChk_ok.asp method=post>
    <p align="center">실명확인 및 가입여부 검사</p>
    <p align="center">이름 : <input type="text" name="nm" size="12"><br>
    주민등록번호 :
    <input type="text" name="resno1" maxlength="6" size="6" onKeyUp="autoFocus(document.f.resno1,6,document.f.resno2)"
    onkeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" style='IME-MODE: inactive'>-
    <input type="text" name="resno2" maxlength="7" size="7" onkeypress="if (event.keyCode < 45 || event.keyCode > 57 ) event.returnValue = false;"
    style='IME-MODE: inactive'></p>

        <p align="center"><input type="submit" value="확인"></p>
    </form>
    </body>