PHP实现的生成唯一RequestID类完整示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-10-05 14:06:38 浏览: 评论:0
这篇文章主要介绍了PHP实现的生成唯一RequestID类,结合完整实例形式分析了php唯一标识符生成、session操作等相关实现与使用技巧,需要的朋友可以参考下。
本文实例讲述了PHP实现的生成唯一RequestID类,分享给大家供大家参考,具体如下:
这里介绍PHP生成唯一RequestID类,使用session_create_id()与uniqid()方法,保证唯一性,提供完整代码及演示,方便大家学习使用。
现在的系统设计一般使用分布式系统,一个请求可能要调用几个微服务处理,最后再把结果返回。当请求出现问题时,我们很难去跟踪是哪个微服务出现问题。
每个请求访问服务器时,我们可以给这个访问加入一个唯一标识(RequestID),在请求开始,请求过程中,及请求结束时,把这个请求流程关键的数据写入日志(例如访问时的参数,经过那些方法,微服务,结束时返回的数据等),当访问出现问题时用于参考,方便追踪到问题。
例如一个请求需要经过几个微服务再返回输出
请求->A->B->C-A->输出
如果访问过程没有输出,或输出错误,我们可以根据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('YmdHis'));
- // 使用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='8,4,4,4,12'){
- $tmp = array();
- $offset = 0;
- $cut = explode(',', $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('-', $tmp);
- }
- } // class end
- ?>
demo:
- <?php
- require 'RequestID.class.php';
- // 生成10个请求id
- for($i=0; $i<10; $i++){
- echo RequestID::generate().PHP_EOL;
- }
- ?>
输出:
- 16532925-4502-CDAD-23A2-463FC7B5803A
- 500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94
- 813143D0-958F-9F56-E04F-679598594452
- E5EE1B0B-E0D6-3E60-D831-462C5A262FCE
- 79E714B5-A37F-4B5E-4EDE-83E18391EBF9
- E1C440AB-FC2C-AC74-E79A-016FD59D9651
- AE483861-1040-BE8D-E523-D7638D0F0D35
- BBD7A03A-36C9-24B7-C453-FB1DDD6E201E
- BF62C3E6-9C5F-22CB-668D-381863B35268
- E97E1F44-F048-962A-5BF7-1113727551B1
注意session_create_id方法需要php7.1以上的版本才可使用
Tags: PHP生成唯一 RequestID

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)