php request id,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($offset

} return implode('-', $tmp);

}

} // class end?>

demo:<?phprequire 'RequestID.class.php';// 生成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方法可参考官网说明:

http://php.net/manual/zh/function.session-create-id.php

源码下载地址:点击查看

本文介绍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

} return implode('-', $tmp);

}

} // class end?>

demo:<?phprequire 'RequestID.class.php';// 生成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方法可参考官网说明:

http://php.net/manual/zh/function.session-create-id.php

源码下载地址:点击查看

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的PHP Web表单生成器的代码示例: ```php <?php // 定义表单元素数组 $form_elements = array( 'text' => 'Text Input', 'textarea' => 'Textarea', 'select' => 'Select Box', 'radio' => 'Radio Buttons', 'checkbox' => 'Checkboxes' ); // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 获取表单元素型 $element_type = $_POST['element_type']; // 获取表单元素名称 $element_name = $_POST['element_name']; // 获取表单元素选项 $element_options = $_POST['element_options']; // 根据表单元素生成相应的HTML代码 switch ($element_type) { case 'text': $html = '<input type="text" name="' . $element_name . '">'; break; case 'textarea': $html = '<textarea name="' . $element_name . '"></textarea>'; break; case 'select': $html = '<select name="' . $element_name . '">'; foreach ($element_options as $option) { $html .= '<option value="' . $option . '">' . $option . '</option>'; } $html .= '</select>'; break; case 'radio': foreach ($element_options as $option) { $html .= '<input type="radio" name="' . $element_name . '" value="' . $option . '">' . $option . '<br>'; } break; case 'checkbox': foreach ($element_options as $option) { $html .= '<input type="checkbox" name="' . $element_name . '[]" value="' . $option . '">' . $option . '<br>'; } break; default: $html = ''; break; } } ?> <!-- 显示表单 --> <form method="post"> <label for="element_type">Select Element Type:</label> <select name="element_type" id="element_type"> <?php foreach ($form_elements as $key => $value) { ?> <option value="<?php echo $key; ?>"><?php echo $value; ?></option> <?php } ?> </select> <br> <label for="element_name">Element Name:</label> <input type="text" name="element_name" id="element_name"> <br> <label for="element_options">Element Options:</label> <input type="text" name="element_options[]" id="element_options"> <br> <input type="submit" value="Generate"> </form> <!-- 显示生成的表单元素 --> <?php if (isset($html)) { ?> <h2>Generated Element:</h2> <?php echo $html; ?> <?php } ?> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值