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

file_put_contents写入异常求助:写入内容与预期哈希值不符

分析与解决方案

嘿,我来帮你拆解这个奇怪的问题——你已经做了不少调试工作,确认哈希计算是对的,但写入文件的内容始终不对,这确实挺让人头疼的!

先梳理下你的核心问题:

  • 调试输出的哈希值是正确的(比如输入hugo得到f0a3e0cbd8776ace8d3069ce2942e9f1)
  • 但FTP查看的目标文件里,内容始终是对应null输入的哈希3293ac630c13f0245f92bbb1766e1616
  • 即使删除文件、去掉哈希函数,写入结果也不符合预期

结合你给出的代码,我整理了几个最可能的原因和对应的调试/修复步骤:

1. 相对路径导致写入了错误的文件

这是最常见的“诡异写入”问题根源!你调试时输出的路径./bdd/xxx/mdp.txt是相对路径,它的实际指向取决于PHP脚本的当前工作目录,而这个目录可能和你预期的不一样(比如Web服务器的文档根目录、脚本所在子目录等)。

修复/调试方法:

把相对路径换成绝对路径,确保写入的是你FTP查看的那个文件:

// 用__DIR__获取当前脚本所在的绝对目录,拼接出目标文件的绝对路径
$filePath = __DIR__ . '/bdd/' . $_SESSION["login"] . '/mdp.txt';
// 输出绝对路径,确认和FTP里的路径一致
echo "实际写入路径:" . $filePath . "<br>";

// 替换原来的file_put_contents
file_put_contents($filePath, $crypt);

如果输出的绝对路径和你FTP里查看的路径不一样,那就是你之前找错了文件!

2. 文件缓存或权限问题

有些共享主机或服务器会开启文件缓存,导致你FTP看到的不是最新的文件内容;或者文件创建后权限设置异常,导致后续写入没有真正生效。

调试方法:

在写入后立即读取文件内容,确认写入是否成功:

file_put_contents($filePath, $crypt);
// 写入后马上读取并输出
$writtenContent = file_get_contents($filePath);
echo "写入后立即读取的内容:" . $writtenContent . "<br>";

如果这里输出的是正确的哈希值,那说明写入是成功的,问题出在FTP查看的缓存——你可以手动刷新FTP连接,或者等待几分钟再查看;如果读取的还是错误值,那就要检查文件权限(确保PHP进程有写入权限)。

3. 变量被意外覆盖

有没有可能在no_check_timer()函数或者其他地方,$crypt变量被意外修改了?比如这个函数里有全局变量操作,或者引用传递修改了它。

调试方法:

在file_put_contents前再次输出$crypt,确认它的值没有被篡改:

$crypt = hash($algo, htmlspecialchars($_POST["mdp"]));
echo "计算后的哈希:" . $crypt . "<br>";
// 调用no_check_timer后再输出一次
no_check_timer();
echo "调用函数后的哈希:" . $crypt . "<br>";
// 写入前最后确认一次
echo "即将写入的哈希:" . $crypt . "<br>";
file_put_contents($filePath, $crypt);

如果某一步的$crypt变成了错误值,那就要去检查no_check_timer()函数的代码了。

4. 代码逻辑的小瑕疵(顺带修复)

你的else分支里有个小问题:$crypt变量只在if分支里定义,else分支里的echo $crypt会触发“Undefined variable”错误,虽然这不是当前问题的根源,但还是建议修复:

else {
    // 这里可以定义一个默认值,或者直接去掉$crypt的输出
    echo $_POST["mdp"]." | ".$_POST["mdp2"]." | 未计算哈希 | ".$filePath;
    echo "<p/><span class='erreur'>ERROR : password & pass confirmation do not match.</span><br/>";
    footer(true);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:46:28