php写一个用户访问统计独立ip数据历史访问数据今日访问量等访问次数统计
以下是一个简单的PHP用户访问统计代码示例:
// 获取用户IP地址
function getUserIP() {
$ip = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
// 获取访问次数
function getVisits() {
$visits = 0;
if (isset($_COOKIE['visits'])) {
$visits = intval($_COOKIE['visits']);
}
return $visits;
}
// 记录用户访问
function recordVisit() {
$ip = getUserIP();
$visits = getVisits();
$today = date('Y-m-d');
// 更新独立IP访问量
$ipFile = 'ip.txt';
$ipData = file_get_contents($ipFile);
$ipArr = explode("\n", $ipData);
if (!in_array($ip, $ipArr)) {
$ipArr[] = $ip;
file_put_contents($ipFile, implode("\n", $ipArr));
}
// 更新历史访问量
$historyFile = 'history.txt';
$historyData = file_get_contents($historyFile);
$historyArr = unserialize($historyData);
if (!isset($historyArr[$today])) {
$historyArr[$today] = 0;
}
$historyArr[$today]++;
file_put_contents($historyFile, serialize($historyArr));
// 更新今日访问量和访问次数
$visits++;
setcookie('visits', $visits, time() + 60 * 60 * 24 * 365); // 保存一年
if (!isset($_SESSION['today'])) {
$_SESSION['today'] = $today;
$todayFile = 'today.txt';
$todayData = file_get_contents($todayFile);
$todayArr = unserialize($todayData);
if (!isset($todayArr[$today])) {
$todayArr[$today] = 0;
}
$todayArr[$today]++;
file_put_contents($todayFile, serialize($todayArr));
} else if ($_SESSION['today'] != $today) {
$_SESSION['today'] = $today;
$todayFile = 'today.txt';
$todayData = file_get_contents($todayFile);
$todayArr = unserialize($todayData);
if (!isset($todayArr[$today])) {
$todayArr[$today] = 0;
}
$todayArr[$today]++;
file_put_contents($todayFile, serialize($todayArr));
}
}
// 记录用户访问
recordVisit();
// 输出统计数据
$ipData = file_get_contents('ip.txt');
$ipArr = explode("\n", $ipData);
$numIPs = count($ipArr);
$historyData = file_get_contents('history.txt');
$historyArr = unserialize($historyData);
$totalVisits = array_sum($historyArr);
$todayData = file_get_contents('today.txt');
$todayArr = unserialize($todayData);
$todayVisits = isset($todayArr[date('Y-m-d')]) ? $todayArr[date('Y-m-d')] : 0;
$visits = getVisits();
echo "独立IP访问量:" . $numIPs . "<br>";
echo "历史访问量:" . $totalVisits . "<br>";
echo "今日访问量:" . $todayVisits . "<br>";
echo "访问次数:" . $visits . "<br>";
该代码使用了四个文件来保存统计数据:
- ip.txt:记录独立IP地址,每个IP地址占据一行。
- history.txt:记录历史访问量,使用序列化数组保存,键为日期,值为访问量。
- today.txt:记录今日访问量,使用序列化数组保存,键为日期,值为访问量。
- 访问者的cookie和session:保存访问次数和今日日期信息。
该代码先定义了三个函数:
- getUserIP:获取用户IP地址。
- getVisits:获取访问次数。
- recordVisit:记录用户访问,并更新统计数据。
recordVisit函数首先获取用户IP地址,然后更新独立IP访问量,如果该IP地址不在ip.txt文件中,则将其添加到文件末尾。然后更新历史访问量,如果当前日期不在历史记录中,则添加一个新的键值对。最后更新今日访问量和访问次数,如果当前日期和$_SESSION['today']不同,则表示新的一天开始,需要更新今日访问量。
主程序中,首先调用recordVisit函数记录用户访问,然后获取统计数据并输出。获取独立IP访问量只需要读取ip.txt文件并计算行数即可。获取历史访问量和今日访问量需要读取history.txt和today.txt文件,进行反序列化得到数组,然后根据日期获取对应的访问量。
最后获取访问次数需要调用getVisits函数,该函数首先检查是否存在名为visits的cookie,如果存在则将其转换为整数返回,否则返回0。在recordVisit函数中,每次访问都会将visits增加1,并将其保存为cookie。因此,getVisits函数返回的就是访问次数。
原文地址: https://www.cveoy.top/t/topic/blPK 著作权归作者所有。请勿转载和采集!