• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP实现的生成唯一RequestID类完整示例

    本文实例讲述了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($offsetstrlen($request_id)){
       $tmp[] = substr($request_id, $offset);
      }
      return implode('-', $tmp);
     }
    } // class end
    ?>
    
    

    demo:

    ?php
    require 'RequestID.class.php';
    // 生成10个请求id
    for($i=0; $i10; $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方法可参考官网说明:
    http://php.net/manual/zh/function.session-create-id.php

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

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

    在线随机数字/字符串生成工具:
    http://tools.jb51.net/aideddesign/suijishu

    在线随机字符/随机密码生成工具:
    http://tools.jb51.net/aideddesign/rnd_password

    在线随机数生成工具:
    http://tools.jb51.net/aideddesign/rnd_num

    在线随机数/随机密码批量生成工具:
    http://tools.jb51.net/aideddesign/rnd_pwd_tool

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

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

    您可能感兴趣的文章:
    • 使用PHP uniqid函数生成唯一ID
    • PHP之uniqid()函数用法
    • PHP实现会员账号单唯一登录的方法分析
    • 完美解决thinkphp唯一索引重复时出错的问题
    • PHP生成唯一ID之SnowFlake算法
    • 3种php生成唯一id的方法
    • PHP实现生成唯一会员卡号
    • PHP生成唯一订单号
    • PHP随机生成唯一HASH值自定义函数
    • PHP生成唯一订单号的方法汇总
    • 高并发php uniqid不重复唯一标识符生成方案
    上一篇:php通过GD库实现验证码功能
    下一篇:PHP实现的创建带logo图标二维码生成类详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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