You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.ini文件实现仅允许唯一$_GET请求的PHP脚本?

用PHP+INI文件实现你的需求

当然可以!完全不需要数据库,用INI文件就能实现你要的生成和验证功能,而且实现起来逻辑清晰。下面我给你详细拆解方案,附带可直接运行的代码:

核心思路

咱们用INI文件来存储所有当前有效的验证代码——结构非常简单,每个生成的代码作为键,值随便设个标记(比如1)就行,因为我们只需要判断代码是否存在。每次调用?create=xxx时生成唯一的随机代码并存入INI;调用?verify=xxx时检查代码是否存在,存在就返回true并删除该代码,否则返回false。

完整代码实现

<?php
// 定义INI文件的存储路径,建议放在Web根目录之外,避免被直接访问
$iniPath = __DIR__ . '/valid_codes.ini';

// 初始化文件:如果INI文件不存在,创建一个空文件
if (!file_exists($iniPath)) {
    file_put_contents($iniPath, '', LOCK_EX);
}

// 处理创建代码的请求
if (isset($_GET['create'])) {
    // 生成6位安全的随机字母数字代码(可调整长度)
    do {
        // 用random_bytes生成安全随机字节,转成base64后替换特殊字符
        $randomBytes = random_bytes(4);
        $code = rtrim(strtr(base64_encode($randomBytes), '+/', '0a'), '=');
        
        // 读取现有代码,确保生成的代码唯一
        $existingCodes = parse_ini_file($iniPath);
    } while (isset($existingCodes[$code]));

    // 将新代码写入INI文件,加独占锁防止并发冲突
    $existingCodes[$code] = 1;
    $iniContent = '';
    foreach ($existingCodes as $key => $val) {
        $iniContent .= "$key=$val\n";
    }
    file_put_contents($iniPath, $iniContent, LOCK_EX);

    // 返回生成的代码
    echo $code;
    exit;
}

// 处理验证代码的请求
if (isset($_GET['verify'])) {
    $targetCode = $_GET['verify'];
    $result = false;

    // 打开文件并加独占锁,避免并发读写问题
    $fileHandle = fopen($iniPath, 'r+');
    if (flock($fileHandle, LOCK_EX)) {
        // 读取文件内容并解析为数组
        $fileContent = fread($fileHandle, filesize($iniPath));
        $existingCodes = parse_ini_string($fileContent);

        // 检查代码是否存在
        if (isset($existingCodes[$targetCode])) {
            $result = true;
            // 删除该代码
            unset($existingCodes[$targetCode]);

            // 重新生成INI内容并写入
            $newIniContent = '';
            foreach ($existingCodes as $key => $val) {
                $newIniContent .= "$key=$val\n";
            }
            ftruncate($fileHandle, 0);
            rewind($fileHandle);
            fwrite($fileHandle, $newIniContent);
        }

        // 释放锁并关闭文件
        flock($fileHandle, LOCK_UN);
        fclose($fileHandle);
    }

    // 返回验证结果
    echo $result ? 'true' : 'false';
    exit;
}

// 处理无效请求
echo 'Invalid request parameter';
?>

关键细节说明

  • 并发安全:代码中使用了LOCK_EX独占锁,确保多个请求同时读写INI文件时不会出现数据丢失或错乱的问题
  • 代码唯一性:生成代码时会循环检查现有代码,保证每次生成的代码都是唯一的
  • 安全建议:
    • 把INI文件放在Web根目录之外,防止被访客直接下载获取所有有效代码
    • 可以给create参数加长度限制,比如最多20个字符,避免恶意输入
    • 对verify参数做过滤,只允许字母数字(因为我们生成的代码只有这两类字符)
  • 权限设置:确保Web服务器的运行用户(比如www-data)对INI文件有读写权限,否则会出现无法写入的错误

内容的提问来源于stack exchange,提问作者ya_Bob_Jonez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:20:08