最近去看了十年之约的虫洞,发现可以统计跳转计数,正好我需要统计一下我下载站的跳转次数,所以我自己也写了个
思路
大概思路就是每跳转一次就往一个文本文件里写入次数,白名单可以判断一个文本文件判断是否包含URL,不用数据库主要是我网站太凉了,也没有那个需求,自定义标题和文字的话,直接写进URL得了,反复读取文件也麻烦
示例
在白名单内的链接
https://api.xiau.net/go/?link=https://ys.mihoyo.com&title=原来你也玩原神&h1=原神,启动!
不在白名单内的链接
https://api.xiau.net/go/?link=https://xiau.net/errtest&title=test&h1=test
实现方式是不是很狂野,不过能用就行_(:з」∠)_
注意事项
次数是以JSON格式存入文本文件的,请确保写入的文本文件存在,否则无法计数,默认的文本文件名是“jump_count.txt”
白名单
白名单功能是靠读取文本文件里是否含这个URL实现的,需要文本文件存在,包含请求的URL才可以使用,默认白名单的文本文件名是“allowed_links.txt”
关闭白名单
你可以注释掉白名单功能开始和白名单功能结束里面的代码,或者删除,这会允许任何URL跳转,也不需要读取文本文件了
代码
这两段代码是一起的,分成两个代码块是因为不知道什么原因,一个代码块没法保存
<?php
// 获取url中的参数
$title = isset($_GET['title']) ? $_GET['title'] : '';
$h1 = isset($_GET['h1']) ? $_GET['h1'] : '';
$link = isset($_GET['link']) ? $_GET['link'] : '';
// 判断参数是否为空
if(empty($title) || empty($h1) || empty($link)){
echo "参数缺失,无法正常显示页面";
exit;
}
// 设置跳转时间
$redirect_time = 3;
// 白名单功能开始
// 读取文件内的链接信息
$file = 'allowed_links.txt';
$allowedLinks = file_get_contents($file);
// 判断链接是否在允许的链接列表中
if(strpos($allowedLinks, $link) === false){
echo "该链接不在允许的链接列表中,无法跳转";
exit;
}
// 白名单功能结束
// 输出HTML代码
echo '<!DOCTYPE html>
<html>
<head>
<title>' . $title . '</title>
<style>
body {
-family: monospace;
background-color: black;
color: white;
text-align: center;
padding-top: 20%;
}
a {
color: white;
text-decoration: none;
border: 1px solid white;
padding: 10px 20px;
margin: 10px;
display: inline-block;
}
a:hover {
background-color: white;
color: black;
}
</style>
</head>
<body>
<h1>' . $h1 . '</h1>';
// 读取跳转次数
$file = 'jump_count.txt';
$data = file_get_contents($file);
$jumpData = json_decode($data, true);
// 初始化跳转次数
$count = 0;
// 判断跳转链接是否存在于文件中
if(isset($jumpData[$link])){
$count = $jumpData[$link];
}
echo '<p>跳转次数: ' . $count . '</p>';
echo '<p>页面将在 ' . $redirect_time . ' 秒后自动跳转...</p>';
echo '<a href="' . $link . '">点击这里立即跳转</a>';
echo '<p style="position: fixed; bottom: 10px; left: 10px; color: gray;">© Xiablog. All rights reserved.</p>';
echo '</body>
</html>';
// 增加跳转次数
$count++;
$jumpData[$link] = $count;
// 将更新后的数据写入文件
file_put_contents($file, json_encode($jumpData));
// 跳转到指定链接
header("refresh:$redirect_time;url=$link");
exit;
?>
纯计数白名单版
仅保留计数功能和白名单的版本,访问后立刻跳转
示例
https://wz.wz/go.php?link=https://www.baidu.com
代码
<?php
// 获取传入的link参数
$link = $_GET['link'] ?? '';
// 判断link参数是否为空
if(empty($link)){
die('没有参数');
}
//白名单功能开始
// 读取文件内的链接信息
$file = 'allowed_links.txt';
$allowedLinks = file_get_contents($file);
// 判断链接是否在允许的链接列表中
if(strpos($allowedLinks, $link) === false){
echo "该链接不在允许的链接列表中,无法跳转";
exit;
}
//白名单功能结束
// 读取存储跳转链接和次数的文件
$file = 'jump_count.txt';
$data = file_get_contents($file);
$jumpData = json_decode($data, true);
// 初始化跳转次数
$count = 0;
// 判断跳转链接是否存在于文件中
if(isset($jumpData[$link])){
$count = $jumpData[$link];
}
// 增加跳转次数
$count++;
$jumpData[$link] = $count;
// 将更新后的数据写入文件
file_put_contents($file, json_encode($jumpData));
// 进行跳转
header('Location: ' . $link);
exit;
?>