怎么完成的
其实是我的chatGPT帮我写的,十分的强大!
所以我代码就不解释了,直接上代码,如果有问题请找AI帮忙分析,需要使用AI可以在本网站右上角找到AI机器人点击使用
代码呈现
<?php/** * 蜘蛛统计 * * @package custom */if (!defined(\'__TYPECHO_ROOT_DIR__\')) exit;$this->need(\'header.php\');?><title>在线网站日志分析-在线蜘蛛统计</title><meta name="description" content="这是一个方便统计网站蜘蛛的工具页面。上传日志文件后,可以快速显示各大搜索引擎蜘蛛的数量统计结果。"><div style="background-color: #ffffff; padding: 20px;"> <h1>蜘蛛统计分析工具</h1> <form method="post" enctype="multipart/form-data"> <input type="file" name="logfile" /> <button type="submit">上传日志文件</button> </form> <?php if (isset($_FILES[\'logfile\'])) { $file = $_FILES[\'logfile\']; if ($file[\'error\'] === 0) { $pathinfo = pathinfo($file[\'name\']); if (strtolower($pathinfo[\'extension\']) === \'log\') { $handle = fopen($file[\'tmp_name\'], "r"); $count = [\'Baiduspider\' => 0, \'Googlebot\' => 0, \'bingbot\' => 0, \'Sogou\' => 0]; while (($line = fgets($handle)) !== false) { foreach ($count as $key => &$value) { if (stripos($line, $key) !== false) { $value++; } } } fclose($handle); arsort($count); $data = []; foreach ($count as $key => $value) { $data[] = [$key, $value]; } ?> <div id="chart_div" style="width: 900px; height: 500px;"></div> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load(\'current\', {\'packages\':[\'corechart\']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable([ [\'Browser\', \'Visits\'], <?php foreach ($data as $item) { ?> [\'<?php echo $item[0]; ?>\', <?php echo $item[1]; ?>], <?php } ?> ]); var options = { title: \'Spider Statistic\', pieHole: 0.4, colors: [\'#3366CC\', \'#DC3912\', \'#FF9900\', \'#109618\'] }; var chart = new google.visualization.PieChart(document.getElementById(\'chart_div\')); chart.draw(data, options); } </script> <?php } else { echo "<p>请上传.log格式的日志文件。</p>"; } } else { echo "<p>上传日志文件出错,请重新尝试。</p>"; } } ?></div><?php $this->need(\'footer.php\'); ?>
注意事项
文件上传最大限制会根据nginx或者PHP的配置所受到限制,建议不要改太大,虽然本代码中已经实现了使用逐行读取的方式进行处理。这样可以避免一次性将整个文件读入内存,从而减少内存占用
而我们一般网站的日志都很大,去文件中手动复制出来又很麻烦,所以我写了一段shell脚本去分割日志,把今天的日志单独存在一个文件中,而且多次执行的话会检测文件是否存在,在的话就往里面重写就行了
#!/bin/bashlog_path="/www/wwwlogs/www.xxxx.com.log"log_dir="/www/wwwlogs"current_date=$(date +%Y-%m-%d)# 判断日志文件是否存在if [ ! -f "$log_path" ]; then echo "日志文件不存在" exit 1fi# 判断备份目录是否存在,不存在则新建if [ ! -d "$log_dir" ]; then mkdir -p $log_dirfi# 判断今天的日志文件是否已经存在,存在则将日志内容追加到已存在的文件中,不存在则新建文件if [ -f "$log_dir/$current_date.log" ]; then grep $(date +"%d/%b/%Y") $log_path >> "$log_dir/$current_date.log"else grep $(date +"%d/%b/%Y") $log_path > "$log_dir/$current_date.log"fi
记得修改位置,然后使用宝塔的计划任务每天执行几次或者隔几小时执行一次即可
更新方向
这只是简单的实现了而已,还能美化界面,包括统计方式只实现了蜘蛛的累计抓取数量,没有统计抓的页面和有多少单独蜘蛛等等,后面有需要我会更新。
有问题及时联系站长,QQ:1240555208
更多优质资源在QQ群里,可以进群领取:467392290~
© 版权声明
THE END
暂无评论内容