• PHP 简易网页访问统计


    传统的网页访问统计,已经有很多,如 51la、百度统计、站长统计

    一般都需要引用JS,在你的网页内嵌入JS,这个操作存在风险,并且不可控。

    可以考虑使用 【img src、css src、link href】引用统计;

    使用方法:

    在需要统计页面添加 <img src="/stat.php" />

    访问记录按照站点每日存储,记录内容:time、ip、url、user_agent、统计参数(stat.php?xxxx)

    使用 stat.php?null=1 禁止输出svg

    使用 stat.php?host=xxx 将多个不同站点统计到一起

    后期基于记录内容可以分析访问数据;

    统计代码的PHP实现:

    <?php
    
    error_reporting(E_ALL & ~E_NOTICE);
    define('ROOT_PATH', dirname(__FILE__) . '/');
    
    $now = date('Y-m-d H:i:s');
    $host = '_null';
    $url = @$_SERVER['HTTP_REFERER'] ?: '';
    if (!empty($url))
    {
        $arr = parse_url($url);
        $host = $arr['host'];
    }
    
    if (!empty($_GET['host']))
    {
        $host = trim($_GET['host']);
        $host = str_replace(['.', '/', '\', ' '], '', $host);
    }
    
    $file = ROOT_PATH . '/stat/' . $host . '/stat.log';
    $str = @file_get_contents($file);
    $arr = [];
    if (empty($str))
    {
        mkdir(ROOT_PATH . '/stat/' . $host);
        $arr = [0,0,$now];
    }
    else
    {
        $arr = explode(',', $str);
    }
    
    $arr[0]++;
    $arr[1] = substr($arr[2], 0, 10) < date('Y-m-d') ? 0 : ($arr[1] + 1);
    $arr[2] = $now;
    
    @file_put_contents($file, implode(',', $arr));
    
    $data = [
        'time'       => $now,
        'ip'         => $_SERVER['REMOTE_ADDR'],
        'user_agent' => @$_SERVER['HTTP_USER_AGENT'] ?: '',
        'url'        => $url,
        'query'      => @$_SERVER['QUERY_STRING'] ?: '',
    ];
    
    @file_put_contents(ROOT_PATH . '/stat/' . $host . '/' . date('Ymd') . '.log', json_encode($data) . PHP_EOL, LOCK_EX|FILE_APPEND);
    
    if (!empty($_GET['null']))
    {
        exit;
    }
    
    // 输出svg
    $out = $arr[0] . '/' . $arr[1];
    $w = strlen($out) * 7 + 5;
    header('Content-Type:image/svg+xml'); 
    echo <<<EOF
    <svg version="1.1"
        width="$w"
        height="15"
        viewBox="0 0 $w 15"
        preserveAspectRatio="none"
        xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
    >
        <text x="2" y="11" style="font-size:12px">$out</text>
    </svg>
    EOF;
    
    exit;
  • 相关阅读:
    【BZOJ1010】【HNOI2008】玩具装箱
    【BZOJ1009】【HNOI2008】GT考试
    【BZOJ1008】【HNOI2008】越狱
    【BZOJ1007】【HNOI2008】水平可见直线
    【BZOJ1006】【HNOI2008】神奇的国度
    (考研)生产者消费者问题(赋代码)
    (考研)(精华)二叉树的知识结构图以及各种特殊的二叉树
    二叉树新的一种新建思路和遍历思路
    (简单但不容易写全对)逆置数组
    (经典)二叉树的层次遍历和快速排序
  • 原文地址:https://www.cnblogs.com/zjfree/p/12052964.html
Copyright © 2020-2023  润新知