zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    HIVE之 Sqoop 1.4.6 安装、hive与oracle表互导
    Sqoop之 Sqoop 1.4.6 安装
    PIG之 Hadoop 2.7.4 + pig-0.17.0 安装
    hadoop之 node manager起不来, 执行mapreduce 程序hang住
    Maven 简介
    graphviz 的节点形状
    graphviz 的绘图布局
    Graphviz 的命令行参数说明
    golang使用graphviz
    IDEA 项目相关基础设置
  • 原文地址:https://www.cnblogs.com/zjfree/p/12052964.html
Copyright © 2011-2022 走看看