PHP8的命令行执行的,主要可以看看读取文件,700M的文件,没有超内存。
date_default_timezone_set('Asia/Shanghai'); //定义时区 $db=new mysqli('localhost','root','123456','test'); ini_set('memory_limit',4096*1024*1024); $tmp='./nginx.log'; foreach (getLines($tmp) as $n => $line) { $str='([^-s]+) - - [([^]]+)] ".* (.*) HTTP/.*" .* ".*" "([^"]+)" ".*"'; preg_match('~'.$str.'~Uis',$line,$res); _log('Start '.($n+1).' rows!'); $ip=isset($res[1])?$res[1]:''; $time=isset($res[2])?date('Y-m-d H:i:s',strtotime($res[2])):date('Y-m-d H:i:s'); $exploer=isset($res[4])?$res[4]:''; $requestUri=isset($res[3])?$res[3]:''; if ($exploer){ //$phoneInfo=explode(' ',$exploer); $regStr='(.*) ((.*)) (.*) ((.*)) (.*) NetType/(.*) Language/.*'; preg_match('~'.$regStr.'~Uis',$exploer,$nres); $exploerVersion=isset($nres[1])?$nres[1]:''; $phoneVersion=isset($nres[2])?$nres[2]:''; //手机操作系统类型,1 Android 2 Iphone 3 其他 $isIphone=3; if(stripos($phoneVersion,'iPhone')){ $isIphone=2; } if(stripos($phoneVersion,'Android')){ $isIphone=1; } $webVersion=isset($nres[3])?$nres[3]:''; $htmlVersion=isset($nres[4])?$nres[4]:''; $wechatVersion=isset($nres[5])?$nres[5]:''; $netType=isset($nres[6])?$nres[6]:''; } //写入数据库 $uuid=uniqid('L_',true); $sql="insert into logs_nginx (`uuid`,`ip`,`visit_time`,`os`,`exploer_version`,`web_version`,`html_version`,`wechat`,`net_type`,`request_uri`,`logs`,`server`,`os_type`) values ('$uuid','$ip','$time','$phoneVersion','$exploerVersion','$webVersion','$htmlVersion','$wechatVersion','$netType','$requestUri','$line','127.0.0.1','$isIphone')"; $db->query($sql); if ($db->errno!='0'){ _log('数据库错误:'.$db->error); } _log('End '.($n+1).' rows!'); } $db->close(); function _log($log_line){ $time_array = explode(" ", microtime()); $time_array[0] = sprintf('%.6f', $time_array[0]); $time = date('Y/m/d H:i:s.', $time_array[1]) . substr($time_array[0], 2) ; echo "[$time] $log_line" . PHP_EOL; } function getLines($file) { $f = fopen($file, 'r'); try { while ($line = fgets($f)) { yield $line; } } finally { fclose($f); } }
用php命令行执行。速度还行。
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《PHP分析nginx日志,主要是读大日志文件》
发表评论