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

PHP兑换密钥页面问题:无法检测并移除密钥求排查

你的PHP兑换密钥代码中的明显问题及修复方案

我帮你梳理下代码里的几个关键错误,这些就是导致功能失效的核心原因:

  • 文件打开模式错误:你用fopen("./generatedkeys.txt", "a")打开文件,"a"是追加模式,文件指针会直接跳到文件末尾,fgets根本读不到任何内容,自然没法检测密钥。应该用只读模式"r",或者更推荐直接用file()函数一次性读取文件内容,避免手动处理文件指针的麻烦。

  • 错误传递参数给file_get_contents:file_get_contents需要接收文件路径字符串,你却传了$file(文件句柄),这会直接导致函数调用失败,根本拿不到文件内容,也就没法替换和删除密钥。

  • 过早关闭文件句柄:你在foreach循环里的fclose($file),第一次循环就把文件关了,后续所有操作都会因为文件已关闭而报错。而且就算密钥没匹配到,这个关闭操作也会提前执行,逻辑完全不对。

  • fgets保留换行符导致匹配失败:fgets读取每行内容时会自带末尾的换行符(\n),但你对比的hash("sha256", $gkey)是没有换行符的哈希值,就算密钥本身正确,也会因为多了换行符导致匹配失败。

  • 未定义的$hwid变量:代码里用到了$hwid但完全没定义,这会抛出Undefined variable的错误,直接中断后续写入accs.txt的操作。

  • 读写逻辑混乱:边读取文件边修改文件内容,很容易出现文件锁定、内容读取不完整的问题,更安全的做法是先把所有密钥读到内存里处理,再一次性写回文件。


修复后的代码示例

<?php
// 先检查必要的GET参数是否存在
if (!isset($_GET["key"])) {
    die("请提供兑换密钥");
}

// 假设你需要从请求中获取HWID,这里根据实际场景调整(比如POST/COOKIE等)
$hwid = $_GET["hwid"] ?? '';
if (empty($hwid)) {
    die("请提供HWID信息");
}

$gkey = $_GET["key"];
$targetHash = hash("sha256", $gkey);
$keyFilePath = "./generatedkeys.txt";
$accFilePath = "./accs.txt";

// 读取所有密钥到数组,自动忽略换行符和空行
$generatedKeys = file($keyFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$keyFound = false;

foreach ($generatedKeys as $index => $key) {
    if ($key === $targetHash) {
        // 移除匹配到的密钥
        unset($generatedKeys[$index]);
        $keyFound = true;
        break;
    }
}

if ($keyFound) {
    // 将处理后的密钥数组写回文件
    file_put_contents($keyFilePath, implode("\n", $generatedKeys) . "\n");
    // 写入accs.txt,注意原代码里hash("sha256", $key)是对已哈希的密钥再次哈希,根据你的需求调整
    file_put_contents($accFilePath, hash("sha256", $key) . "," . hash("sha256", $hwid) . "\n", FILE_APPEND);
    echo "密钥兑换成功!";
} else {
    echo "无效的兑换密钥!";
}

额外提示

  1. file()函数比手动fopen+fgets更简洁,自带的参数能帮你处理换行符和空行,避免匹配问题。
  2. 先在内存中处理密钥数组,再一次性写入文件,彻底避免了文件读写冲突的问题。
  3. 增加了参数检查,能提前拦截非法请求,避免未定义变量的错误。
  4. 确保generatedkeys.txt和accs.txt有合适的读写权限,否则PHP会无法操作文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:01:44