PHP中if语句匹配两个值失败:值显示一致却不匹配
PHP密码匹配失败排查方案
清理隐藏空白字符:从
pass.txt读取的字符串大概率带了换行/回车符(肉眼看不到),直接echo只会显示内容但不会展示这些控制字符。先对读取到的密码做去空白处理再对比:$pass_detect = trim(file_get_contents('pass.txt')); if ($pass_detect === $user["password"]) { echo "Login Successfull!"; } else { echo "Invalid Password!"; }或者用
var_dump()打印两个变量的完整信息,看长度和实际值是否一致:var_dump($pass_detect, $user["password"]);检查文件编码问题:如果
pass.txt是UTF-8带BOM编码,读取时会在字符串开头加入不可见的BOM头,导致对比失败。把文件转成无BOM的UTF-8格式,或者读取时手动去除BOM:$pass_detect = file_get_contents('pass.txt'); $pass_detect = preg_replace('/^\x{FEFF}/u', '', $pass_detect);排查转义字符干扰:旧PHP环境里如果
magic_quotes_gpc是开启状态,用户POST提交的密码会被自动加转义符(比如'变成\'),但文件里的密码没有这层转义。可以用stripslashes()处理用户输入:$user_password = stripslashes($user["password"]); if ($pass_detect === $user_password) { ... }对比十六进制字节:如果以上都没解决,把两个字符串转成十六进制,看每个字节的差异,找出不可见特殊字符:
echo bin2hex($pass_detect) . "\n" . bin2hex($user["password"]);
内容的提问来源于stack exchange,提问作者Blitical
相关产品推荐
相关产品推荐

