[PHP开发]单页跳转计数,访客显示次数,自定义文字以及白名单

最近去看了十年之约的虫洞,发现可以统计跳转计数,正好我需要统计一下我下载站的跳转次数,所以就写了个差不多的

思路

大概思路就是每跳转一次就往一个文本文件里写入次数,白名单可以判断一个文本文件判断是否包含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;
?>
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇