PHP は一意の RequestID クラスを生成します

不言
リリース: 2023-03-23 20:32:01
オリジナル
3163 人が閲覧しました

この記事では、特定の参照値を持つ固有の RequestID クラスを生成する PHP を主に紹介します。必要な友達はそれを参照できるようになりました。

session_create_id() の使用

メソッドと uniqid() メソッドは一意性を保証し、誰もが学習して使用できる完全なコードとデモンストレーションを提供します。 現在のシステム設計では、一般に分散システムが使用され、リクエストは処理のために複数のマイクロサービスを呼び出し、最終的に結果を返します。リクエストで問題が発生した場合、どのマイクロサービスに問題があるかを追跡するのは困難です。 各リクエストがサーバーにアクセスするとき、リクエストの開始時、リクエストプロセス中、およびリクエストの終了時に、このアクセスに一意の識別子

(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
ログイン後にコピー
ログイン後にコピー
注:

session_create_id

メソッドにはphp7が必要です。 1以降のバージョンが使用可能です。

session_create_id メソッドについては、公式 Web サイトの説明を参照してください:
http://php.net/manual/zh/function.session-create-id.php

ソースコードのダウンロードアドレス: クリックして表示




この記事では、PHP で一意の
RequestID クラスを生成し、session_create_id()

メソッドと

uniqid() メソッドを使用して一意性を確保し、誰もが学習して使用できる完全なコードとデモを提供する方法を紹介します。 現在のシステム設計では、一般に分散システムが使用され、リクエストは処理のために複数のマイクロサービスを呼び出し、最終的に結果を返します。リクエストで問題が発生した場合、どのマイクロサービスに問題があるかを追跡するのは困難です。 各リクエストがサーバーにアクセスするとき、リクエストの開始時、リクエストプロセス中、およびリクエストの終了時に、このアクセスに一意の識別子(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
ログイン後にコピー
ログイン後にコピー
注: session_create_idメソッドには

php7が必要です。 1以降のバージョンが使用可能です。

session_create_id メソッドについては、公式 Web サイトの説明を参照してください:

http://php.net/manual/zh/function.session-create-id.php
ソースコードのダウンロードアドレス: クリックして表示



関連する推奨事項:

PHP は読み取り可能なランダム文字列を生成します

以上がPHP は一意の RequestID クラスを生成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート