>백엔드 개발 >PHP 튜토리얼 >고유한 RequestID 클래스를 생성하는 PHP에 대한 자세한 설명

고유한 RequestID 클래스를 생성하는 PHP에 대한 자세한 설명

jacklove
jacklove원래의
2018-06-09 09:18:161835검색

이 문서에서는 session_create_id()uniqid() 메서드를 사용하여 고유한 RequestID 클래스를 생성하는 PHP를 소개하고 모든 사람이 배우고 사용할 수 있는 완전한 코드와 데모를 제공합니다.

현재 시스템 디자인은 일반적으로 분산 시스템을 사용합니다. 요청은 처리를 위해 여러 마이크로서비스를 호출하고 최종적으로 결과를 반환할 수 있습니다. 요청에 문제가 발생하면 어떤 마이크로서비스에 문제가 있는지 추적하기가 어렵습니다.

각 요청이 서버에 액세스할 때 요청 시작 시, 요청 프로세스 도중, 요청 종료 시 고유 식별자(RequestID)를 이 액세스에 추가할 수 있습니다. 이 요청 프로세스는 로그에 기록됩니다(예: 액세스 중 매개변수, 전달된 메서드, 마이크로서비스, 마지막에 반환된 데이터 등). 액세스에 문제가 있을 때 참조로 사용할 수 있습니다. 문제 추적.
예를 들어 요청은 출력을 반환하기 전에 여러 마이크로서비스를 거쳐야 합니다

Request->A->B->C-A->Output

액세스 프로세스 중에 출력이 없는 경우 또는 출력이 잘못된 경우 RequestID를 사용하여 A, B, C에 해당하는 로그를 찾아 어떤 서비스에 문제가 있는지 확인할 수 있습니다.

코드는 다음과 같습니다:

RequestID.class.php

<?php/**
 * PHP生成唯一RequestID类
 * Date:    2018-04-10
 * Author:  fdipzone
 * Version: 1.0
 *
 * Description:
 * PHP实现生成唯一RequestID类,使用session_create_id()与uniqid()方法实现,保证唯一性。
 *
 * Func:
 * public  generate 生成唯一请求id
 * private format   格式化请求id
 */class RequestID{ // class start
    /**
     * 生成唯一请求id
     * @return String
     */
    public static function generate(){
        // 使用session_create_id()方法创建前缀
        $prefix = session_create_id(date(&#39;YmdHis&#39;));        // 使用uniqid()方法创建唯一id
        $request_id = strtoupper(md5(uniqid($prefix, true)));        // 格式化请求id
        return self::format($request_id);
    }    /**
     * 格式化请求id
     * @param  String $request_id 请求id
     * @param  Array  $format     格式
     * @return String
     */
    private static function format($request_id, $format=&#39;8,4,4,4,12&#39;){
        $tmp = array();        $offset = 0;        $cut = explode(&#39;,&#39;, $format);        // 根据设定格式化
        if($cut){            foreach($cut as $v){                $tmp[] = substr($request_id, $offset, $v);                $offset += $v;
            }
        }        // 加入剩余部分
        if($offset<strlen($request_id)){            $tmp[] = substr($request_id, $offset);
        }        return implode(&#39;-&#39;, $tmp);
    }
} // class end?>

demo:

<?phprequire &#39;RequestID.class.php&#39;;// 生成10个请求idfor($i=0; $i<10; $i++){    echo RequestID::generate().PHP_EOL;
}?>

출력:

16532925-4502-CDAD-23A2-463FC7B5803A500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94813143D0-958F-9F56-E04F-679598594452E5EE1B0B-E0D6-3E60-D831-462C5A262FCE79E714B5-A37F-4B5E-4EDE-83E18391EBF9
E1C440AB-FC2C-AC74-E79A-016FD59D9651
AE483861-1040-BE8D-E523-D7638D0F0D35BBD7A03A-36C9-24B7-C453-FB1DDD6E201EBF62C3E6-9C5F-22CB-668D-381863B35268
E97E1F44-F048-962A-5BF7-1113727551B1


Notesession_ create_ id 메소드에는 php7이 필요합니다. 1 이상 버전부터 사용 가능합니다.

이 문서에서는 PHP에서 고유한 RequestID 클래스를 생성하는 관련 지식을 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참조하세요.

관련 권장 사항:

MySQL을 통해 데이터베이스 테이블 용량을 확인하는 방법

php str_getcsv를 사용하여 문자열을 배열로 구문 분석하는 방법에 대한 설명

요청을 줄이기 위해 서버 인터페이스를 호출하도록 클라이언트를 최적화합니다. 데이터 용량

위 내용은 고유한 RequestID 클래스를 생성하는 PHP에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.