随笔 - 317, 文章 - 0, 评论 - 453, 阅读 - 114万
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

PHP 简易网页访问统计

Posted on   PHP-张工  阅读(2055)  评论(0编辑  收藏  举报

传统的网页访问统计,已经有很多,如 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;
复制代码

 

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示