araña de estadísticas de análisis de registro nginx

Arañas de estadísticas en línea,  estadísticas de araña de registro del sitio web de análisis- Youcaiyouaiwang

como se hizo

De hecho, mi chatGPT lo escribió para mí, ¡es muy poderoso!

Por lo tanto, no explicaré el código, solo cargue el código directamente, si tiene alguna pregunta, solicite a AI que lo ayude a analizar, si necesita usar AI, puede encontrar el robot AI en la esquina superior derecha de este sitio web y haga clic para usar

representación de código

Este código se usa para crear una nueva página independiente en typecho, puedes elegirlo tú mismo

<?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'); ?>

Precauciones

El límite máximo de carga de archivos estará limitado según la configuración de nginx o PHP, se recomienda no cambiarlo demasiado, aunque este código ha implementado el método de lectura línea por línea para su procesamiento. Esto evita leer todo el archivo en la memoria a la vez, lo que reduce el uso de la memoria.

Sin embargo, los registros de nuestro sitio web general son muy grandes y es muy problemático copiarlos manualmente del archivo, por lo que escribí un script de shell para dividir el registro, almacenar el registro de hoy en un archivo separado y si se ejecuta varias veces, detectará si el archivo es Si existe, simplemente vuelva a escribirlo en él.

#!/bin/bash
log_path="/www/wwwlogs/www.xxxx.com.log"
log_dir="/www/wwwlogs"
current_date=$(date +%Y-%m-%d)

# 判断日志文件是否存在
if [ ! -f "$log_path" ]; then
    echo "日志文件不存在"
    exit 1
fi

# 判断备份目录是否存在,不存在则新建
if [ ! -d "$log_dir" ]; then
    mkdir -p $log_dir
fi

# 判断今天的日志文件是否已经存在,存在则将日志内容追加到已存在的文件中,不存在则新建文件
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

Recuerde modificar la ubicación y luego use la tarea programada de la pagoda para ejecutarla varias veces al día o una vez cada pocas horas.

actualizar direcciones

Esto es solo una realización simple, y también puede embellecer la interfaz, incluido el método estadístico, solo se da cuenta de la cantidad acumulada de arañas rastreadas, y no cuenta las páginas rastreadas y cuántas arañas individuales hay, etc. Lo actualizaré más adelante. si necesario.

Supongo que te gusta

Origin blog.csdn.net/qq_22163803/article/details/130707295
Recomendado
Clasificación