欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP实现的生成唯一RequestID类完整示例

程序员文章站 2022-11-21 11:45:29
本文实例讲述了php实现的生成唯一requestid类。分享给大家供大家参考,具体如下: 这里介绍php生成唯一requestid类,使用session_create_i...

本文实例讲述了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以上的版本才可使用。

关于session_create_id方法可参考官网说明:

源码下载地址:点击此处本站下载

ps:这里再为大家提供两款相关在线工具供大家参考使用:

在线随机数字/字符串生成工具:

在线随机字符/随机密码生成工具:

在线随机数生成工具:

在线随机数/随机密码批量生成工具:

更多关于php相关内容感兴趣的读者可查看本站专题:《php数学运算技巧总结》、《php字符串(string)用法总结》、《php数据结构与算法教程》、《php程序设计算法总结》、《php数组(array)操作技巧大全》及《php常见数据库操作技巧汇总

希望本文所述对大家php程序设计有所帮助。