当前位置:首页 > PHP

PHP防重推荐实现

2026-02-14 02:10:10PHP

PHP防重推荐实现

基于数据库的唯一索引

在数据库中为需要防重的字段添加唯一索引,确保数据唯一性。例如用户注册时防止重复用户名:

ALTER TABLE users ADD UNIQUE INDEX (username);

PHP插入数据时捕获唯一键冲突异常:

try {
    $stmt = $pdo->prepare("INSERT INTO users (username) VALUES (?)");
    $stmt->execute([$username]);
} catch (PDOException $e) {
    if ($e->errorInfo[1] == 1062) {
        echo "用户名已存在";
    }
}

Redis原子操作防重

利用Redis的SETNX命令实现分布式锁,适合高并发场景:

PHP防重推荐实现

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'user_register:' . $username;

if ($redis->setnx($key, 1)) {
    $redis->expire($key, 300); // 设置5分钟过期
    // 执行核心业务逻辑
} else {
    echo "操作过于频繁,请稍后重试";
}

布隆过滤器实现

对于海量数据去重,可使用布隆过滤器减少数据库查询:

// 使用phpbloom库示例
require_once 'BloomFilter.php';
$bf = new BloomFilter(1000000, 0.01);

if ($bf->has($item)) {
    echo "内容已存在";
} else {
    $bf->add($item);
    // 写入数据库
}

文件哈希校验

文件上传防重可通过计算文件哈希值实现:

PHP防重推荐实现

$fileHash = md5_file($_FILES['file']['tmp_name']);
$stmt = $pdo->prepare("SELECT COUNT(*) FROM files WHERE file_hash = ?");
$stmt->execute([$fileHash]);
if ($stmt->fetchColumn() > 0) {
    echo "相同文件已存在";
}

客户端Token机制

表单提交防重复可通过Token实现:

// 生成Token
$token = bin2hex(random_bytes(32));
$_SESSION['form_token'] = $token;

// 验证Token
if ($_POST['token'] !== $_SESSION['form_token']) {
    die("重复提交禁止");
}
unset($_SESSION['form_token']);

时间窗口限制

对API接口实现时间窗口防重:

$redisKey = 'api_limit:' . $userId;
$current = time();
$window = 60; // 60秒窗口

if ($redis->zCount($redisKey, $current - $window, $current) > 0) {
    http_response_code(429);
    exit;
}
$redis->zAdd($redisKey, $current, $current);
$redis->expire($redisKey, $window);

标签: PHP
分享给朋友:

相关文章

PHP接口防重推荐实现

PHP接口防重推荐实现

防重实现方法 使用唯一请求标识符(UUID或业务ID)作为防重依据,客户端每次请求生成唯一标识,服务端校验该标识是否已处理过。适合短时间内的重复请求拦截。 // 客户端生成唯一标识 $request…

域名转短域名PHP实现

域名转短域名PHP实现

短域名服务的基本原理 短域名服务通过将长URL映射到更短的唯一字符串实现跳转。核心步骤包括生成短码、存储原始URL与短码的对应关系、通过短码重定向到原始URL。 生成短码的常见方法 Base62编码…

PHP实现elm

PHP实现elm

PHP实现ELM(极限学习机) ELM(Extreme Learning Machine)是一种单隐层前馈神经网络算法,具有训练速度快、泛化性能好的特点。以下是PHP实现ELM的关键步骤和代码示例。…

PHP实现预约

PHP实现预约

PHP预约系统实现方法 创建预约系统需要处理用户输入、数据存储和验证。以下是一个基本的PHP预约系统实现框架: 数据库表结构 CREATE TABLE appointments ( id…

PHP实现录像

PHP实现录像

PHP实现录像功能 PHP本身是服务器端脚本语言,不直接处理视频录制功能,但可以通过以下方式实现录像相关功能: 使用WebRTC技术 前端通过WebRTC获取摄像头视频流,PHP后端处理视频存储:…

PHP http长连接的实现

PHP http长连接的实现

PHP HTTP 长连接的实现 HTTP 长连接(Keep-Alive)允许客户端和服务器在单个TCP连接上发送和接收多个HTTP请求/响应,减少连接建立和关闭的开销。以下是实现方法: 启用服务器端…