워크박스

그누보드, 영카트 get_uniqid() 함수 본문

그누보드&영카트

그누보드, 영카트 get_uniqid() 함수

오픈빌더 2020. 9. 5. 20:20

PHP8 Warning: A non-numeric value encountered in /lib/common.lib.php on line 2233

/*
    유일한 키를 얻는다.

    결과 :

        년월일시분초00 ~ 년월일시분초99
        년(4) 월(2) 일(2) 시(2) 분(2) 초(2) 100분의1초(2)
        총 16자리이며 년도는 2자리로 끊어서 사용해도 됩니다.
        예) 2008062611570199 또는 08062611570199 (2100년까지만 유일키)

    사용하는 곳 :
    1. 게시판 글쓰기시 미리 유일키를 얻어 파일 업로드 필드에 넣는다.
    2. 주문번호 생성시에 사용한다.
    3. 기타 유일키가 필요한 곳에서 사용한다.

    기존의 get_unique_id() 함수를 사용하지 않고 get_uniqid() 를 사용한다.
*/

function get_uniqid()
{
    global $g5;

    sql_query(" LOCK TABLE {$g5['uniqid_table']} WRITE ");
    while (1) {
        // 년월일시분초에 100분의 1초 두자리를 추가함 (1/100 초 앞에 자리가 모자르면 0으로 채움)
        // $key = date('YmdHis', time()) . str_pad((int)(microtime()*100), 2, "0", STR_PAD_LEFT);
        // PHP8 환경에서 오류로 rand 함수를 사용해도 큰차이가 없기때문에 변경함
        $key = date('YmdHis', time()) . str_pad(rand(0, 99), 2, "0", STR_PAD_LEFT);
        $result = sql_query(" insert into {$g5['uniqid_table']} set uq_id = '$key', uq_ip = '{$_SERVER['REMOTE_ADDR']}' ", false);
        if ($result) break; // 쿼리가 정상이면 빠진다.

        // insert 하지 못했으면 일정시간 쉰다음 다시 유일키를 만든다.
        usleep(10000); // 100분의 1초를 쉰다
    }
    sql_query(" UNLOCK TABLES ");

    return $key;
}
Comments