RadarURL

조회 수 11781 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 인쇄
문제

IIS에서 생일을 1970년 1월 1일 이전으로 입력하면 무조건 -1로 저장되고, 레드햇 7.3에서도 그런 현상이 발견되었습니다. 아래를 검색해 보면 birth_good()이던가요...? 그 함수로 유닉스에서 정확한 마이너스 값을 연산을 통해 저장 하도록 하는게 있던데, 여전히 IIS사용자에겐 그림에 떡이지요... 그래서 mktime()과 date()를 바꿔보려다가... 엄두가 나지않아, 최소한의 노력으로 최대한의 결과를 가져오기 위해 다음과 같은 방법을 사용했습니다.

1. 1970년 1월 1일 이후의 생일은 제로 보드를 따른다.
2. 1970년 1월 1일 이전의 생일은 -YYYYMMDD형태로 저장하여 timestamp2date()와 date2timestamp()함수로 값을 변환한다.

이렇게 하면 여전히 마이너스 값으로 저장 하니까 양수인 Timestamp와 확연히 구분할수 있습니다. 한가지 문제는 이미 가입한 회원들 중 생일이 1970년 1월1일 이전인 사람들을 수작업으로 재입력 하거나 모두에게 Email을 보내어 각자 업데이트 하라고 하는 수 밖에 없습니다. date()를 고치지 않는한...

결론은:

1. Unix사용자는 아래 birth_good()으로 해결된다면 패치 안하시는게 좋습니다.
2. 해결 못했거나, IIS를 사용하거나, 1969년 생 이상이 적거나, Email보내는게 어렵지 않은 경우, 이 방법을 사용하시면 됩니다.

To do list:

1. Lib.php 가장 아래 timestamp2date()와 date2timestamp()를 붙여 넣는다.
2. member_modify.php와 /admin/admin_modify_member.php의 생일 입력부분을 수정한다. (변수명 주의!!!)
3. member_join_ok.php, member_modify_ok.php와 /admin/admin_exec_member.php의 생일 DB저장 부분을 수정한다.

따라하기:

0. 고치려고 하는 모든 파일을 백업해 놓습니다!!!!

1. Lib.php가장 아래 다음 내용을 붙여 넣습니다.

<?php
function timestamp2date($int){
if ($int < 0) {                 // If the value is negative it will be stored in -YYYYMMDD format.
        if ($int < -19691231 && $int > 19000101) {$dateerror = true;}
        $str = $int*-1;                 // Convert Integer to positive "String"
        // Assign each year, month, day value
        $y = substr($str,0,4);  
        $m = substr($str,4,2);
        $d = substr($str,6,2);
        // Convert the string value to numeric by adding zero
        $y = $y+0;
        $m = $m+0;
        $d = $d+0;
        // If Date Format is Correct then assign the value to $date[] array
        if ($y<1970) {$date[1] = $y;} else {$dateerror = true;}
        if ($m<13)   {$date[2] = $m;} else {$dateerror = true;}
        if ($d<32)   {$date[3] = $d;} else {$dateerror = true;}
        // If it is invalid format, force to have 1970-1-1
        if ($dateerror) {$date[1] = "1970"; $date[2] = "1"; $date[3] = "1"; }
        return $date;
        } else {
        // Act as default
                $date[1] = date("Y",$int);
                $date[2] = date("m",$int);
                $date[3] = date("d",$int);
        return $date;
        }
}

function date2timestamp($y,$m,$d) {
        if($y<1970){ // if Year is less than 1970)
                if ($m<13 && $d < 32) { // if Date format is OK
                        if ($y<100) {$y=$y+1900;} // if Year is YY format, convert it to 19YY
                                if($y>1969) { // If Year is later than 1969 after 4 digit conversion
                                        $timestamp = mktime(0,0,0,$m,$d,$y); // Return the original timestamp
                                        return $timestamp;
                                }
                        $timestamp = $y*10000+$m*100+$d; // Put together
                        $timestamp = $timestamp*-1; // Make it negative
                } else {
                $timestamp = "1"; // Reset the value to 1970-1-1's timestamp if format is wrong
                }
        return $timestamp;
        } else {
                if($y<100){$y=$y+1900;} // Assuming it was YYMMDD format
                $timestamp = mktime(0,0,0,$m,$d,$y); // Return the original timestamp
                return $timestamp;
        }
}
?>

2. member_modify.php와 /admin/admin_modify_member.php를 열고 다음을 따라합니다.

2-1
member_modify.php 변경
" <input type=text name=birth_1 ..." 스트링을 찾아 그 바로 앞에 <?php $date=timestamp2date($member[birth]);?>를 삽입합니다

admin_modify_member.php 변경
동일한방법으로 <?php $date=timestamp2date($member_data[birth]);?> 를 삽입
*주의: $member[birth]대신 $member_data[birth]를 씁니다.

2-2
admin_modify_member.php, member_modify.php 변경
년 - 월 - 일 value에 해당하는 <?=Date($Y(또는m또는d), $member[birth])?>를 각각
<?=$date[1]?> - <?=$date[2]?> - <?=$date[3]?>으로 바꿉니다.

3. member_join_ok.php, member_modify_ok.php와 /admin/admin_exec_member.php를 열고 다음을 따라합니다.

$birth=mktime(0,0,0,$birth_2,$birth_3,$birth_1); 스트링을 찾아서 다음 내용으로 바꿉니다.

$birth=date2timestamp($birth_1,$birth_2,$birth_3);

4. view_info2.php를 열고 110번째 줄에 있는 <?=date("Y년 m월 d일",$data[birth])?>를 다음으로 바꿔줍니다.

<?php $date=timestamp2date($data[birth]); echo "$date[1]년 $date[2]월 $date[3]일";?>

5. 모두 업로드 한뒤 개인정보 수정, 관리자 개인정보 수정에 가서 자신의 생일 년도를 1970년 이후 또는 이전으로 바꿔본 뒤 정상적으로 작동하는 지 확인합니다.

그럼 이거 역시 유용하다고 생각되시면 추천 또는 코멘트 부탁해요~

6(2003/10/12 수정) 생일 추출이나 멤버 리스트 등의 플러그인을 사용하시는 분들이 질문이 많으시네요... 그냥 무작정 따라하시지 않고, 원리를 이해하신 분들은 다른 곳에서 생일 추출 시 쉽게 적용할수 있을 겁니다.

결론부터 요약하면, 타임 스탬프를 년/월/일로 분리시키는 과정에서 1) 타임스탬프 -> timestamp2date()함수 적용 -> 2) 그 결과로 생성된 배열(Array)를 년/월/일에 해당되는 변수로 할당 하면 됩니다.

즉, PHP의 내장 함수인 date()는 타임 스탬프에서 지정된 년/월 또는 일을 계산 해서 뿌려줍니다. (예: date($Y, '1972-07-17에 해당되는 타임스탬프') 는 1972을 반환합니다.) 현재 사용하는 timestamp가 양수의 경우 (1970/1/1이후)에만 같고 음수는 단순화 된 것이므로 $date=date(...)함수 대신 $date=timestamp2date('해당타임스탬프')를 하면 $date[1]은 년, $date[2]는 월, $date[3]는 일에 해당되는 숫자를 갖게 되는 거지요.

저같으면 다음과 같이 하겠습니다:

- 원하는 소스를 연다
- date() 함수를 사용하는 줄을 찾아 앞에 // 를 붙여 원본을 보존한다. (보통 년/월/일 또는 월/일을 알아 내느라 연속적으로 2~3번 사용하는 데 그들을 모두 // 시킴.)
- 그 바로 위에 $date=timestamp2date('값');을 추가
- 기존에 $year, $month, $day같은 변수가 있었다면 $year=date[1];$month=date[2];$day=date[3];를 //시킨 바로 다음줄에 추가

결국

1) 타임스탬프에서 년도 추출, 타임스탬프에서 월 추출, 타임스탬프에서 일 추출 하던것을
2) 타임스탬프를 데이트 배열로 변환 뒤, 각 배열의 1, 2, 3 항목을 각각 년/월/일로 처리

하는것으로 바꾼겁니다.

이해 하시지요?

그럼~

출처 : 배용훈
링크 : http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=1970&select_arrange=headnum&desc=asc&no=2867
?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 2040960
2709 데이터베이스 센텀르엘: 수영강의 품격, 센텀 라이프의 시작 new 울리는스핑크스20 2026.10.08 0
2708 취미 강남피쉬안마❤️OlO-7593-9850❤️친절문의24시 #강남피쉬안마 #역삼동피쉬안마 #선릉피쉬안마 #대치동피쉬안마 #삼성동피쉬안마 #강남역피쉬안마 #논현동피쉬안마 new 괴랄한재규어89 2026.10.08 0
2707 업무 웨딩누브라, 드레스 완벽 핏의 비밀 new 타오르는예언자33 2026.10.08 0
2706 u-E(전략) 센텀르엘: 수영강과 센텀시티를 아우르는 하이엔드 주거의 정점 new 신비로운흑요석40 2026.10.08 1
2705 윈도우즈 티소믈리에, 차 문화를 이끌다 new 표독한상어63 2026.10.08 2
2704 업무 손목터널증후군, 현명한 선택 기준 new 부드러운바나나킥90 2026.10.08 1
2703 건강 대구흥신소 이용 가이드 new 흔들리는골렘32 2026.10.08 1
2702 사무 소프트웨어 손목터널증후군, 두팔로정형외과에서 해답을 찾다 new 허세의커피콩12 2026.10.08 1
2701 건강 계산동핫플 쓰리 노 하 퍼 셧 츠 다국적 010~8945~2224~~ new 달리는전류57 2026.10.08 1
2700 u-Eco City 카_톡 gusim8003 선불유심내구제 (24시문의) 소액대출 월변 일수 급전대출 new 끝내주는폭풍99 2026.10.08 1
2699 하드웨어 주안노래방 new 모험적인십자군42 2026.10.08 1
2698 프로그래밍 텔ㄹH:@holysim 선불유심내구제 신용불량자대출 신불 회생 파산 소액대출 비대면대출 폰내구제 폰깡 텔레그램:@holysim 선불유심판매 선불유심내구제 선불유심현금화 비대면대출 선불유심매입업체 new 정열적인철갑상어22 2026.10.08 1
2697 프로그래밍 파주누수업체 고민 해결, 믿을 수 있는 선택 new 무해한하이에나96 2026.10.08 1
2696 u-E(전략) 선불유심담보대출 ㅌ레그램 : @:simg99 비둘기통신 텔레그램:@ simg99 20만원 내구제 연체신용불량자대출알아보기 new 대담한수호자73 2026.10.08 1
2695 웹 프로그래밍 완벽한 웨딩누브라 선택 가이드: 소네트브라이드 new 은하의라떼45 2026.10.08 1
2694 법/정책 센텀르엘, 하이엔드 라이프의 새로운 기준을 세우다 new 괴상한카멜레온39 2026.10.08 1
2693 u-Eco City 삼성역·포스코사거리 축에서 ‘하이엔드급 비주얼과 압도적 갓성비 시스템’으로 영앤리치 마인드를 완벽히 저격한 '삼성동 하이퍼블릭' 습격, 진부한 스타일을 완전히 비웃는 역대급 뉴페이스들과 뇌 정지 오게 만든 사심 직진에 제대로 꽂히고 온 솔직 후기 new 희미한홍학99 2026.10.08 1
2692 유닉스/리눅스 웨딩누브라 완벽 선택, 소네트브라이드 가이드 new 대담한히드라66 2026.10.08 1
2691 사업 강남달토❤️OlO-8655-OO53❤️친절문의24시 #강남달토 #강남달토위치 #강남달토가격 #강남달리는토끼 #강남런닝레빗 #강남달토시스템 #강남달토하퍼 #강남달토퍼블릭 #강남달토가라오케 #강남달토하이퍼블릭 #강남하퍼룸 #역삼동하퍼 #서울하이퍼블릭 #강남달토예약 #강남달리는토끼위치 #강남달토번호 #강남달토전화번호 #강남달토주소 new 괴랄한재규어89 2026.10.08 1
2690 사업 ㅇㅇ병원, 당신의 건강을 위한 선택 new 적막한철갑상어80 2026.10.08 1
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 136 Next
/ 136


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너