php 解析nginx 日志,16进制转换字符串
序言
强烈推荐使用 EmEditor 文本编辑器查看日志,基本1个G的日志文件可以秒开。
废话不多说直接上代码
$line = '一行日志数据';
$line = explode('|', $line);
//请求内容,自己打印出来确定下标
$jsonString = trim($line[6]);
//正则匹配16进制字符串
$pattern = '/(\\\\x([0-9A-Fa-f]{2}))+/';
//在当前json字符串中匹配所有的16进制字符,并转换二进制,此处可以正常转换中文
$escapedStr = preg_replace_callback($pattern, function ($matches) {
$str = $matches[0];
// 使用hex2bin函数将十六进制转换为二进制
$binary = hex2bin(str_replace('\x', '', $str));
return $binary;
}, $jsonString);
$data = json_decode($escapedStr, true);
print_r($data);
本作品采用《CC 协议》,转载必须注明作者和本文链接