PHP中file_get_contents返回值判断始终为false的问题求助
解决
file_get_contents()获取内容判断不匹配的问题 这种情况我碰到过好多次,大概率是你的$content变量里藏着肉眼看不到的隐藏字符——比如空格、换行符,甚至是UTF-8文件的BOM头!echo的时候这些隐藏字符不会显示出来,但判断的时候就会导致匹配失败。
第一步:先确认变量的真实内容
别光靠echo看,用这两个方法排查:
- 用
var_dump($content):它会显示变量的类型和长度,比如如果输出string(2) "1",说明变量里除了"1"还有一个隐藏字符(长度是2)。 - 用
bin2hex($content):把所有字符转成十六进制,比如正常的"1"会输出31,如果带换行就是310a,带BOM头就是efbbbf31,一眼就能看出问题。
第二步:针对性解决
根据排查结果来处理:
- 如果是首尾的空格/换行/制表符:直接用
trim()函数清理,它会去掉字符串首尾的空白字符:$content = trim(file_get_contents('your_file_path')); if ($content == "1") { echo "True"; } else { echo "False"; } - 如果是UTF-8 BOM头:trim搞不定BOM(因为它不属于空白字符),需要手动去掉开头的3个字节:
$content = file_get_contents('your_file_path'); // 检查并移除UTF-8 BOM头 if (substr($content, 0, 3) === "\xef\xbb\xbf") { $content = substr($content, 3); } if ($content == "1") { echo "True"; } else { echo "False"; } - 极端情况:其他不可见字符:可以用正则表达式只保留数字字符:
$content = preg_replace('/[^0-9]/', '', file_get_contents('your_file_path')); if ($content == "1") { echo "True"; } else { echo "False"; }
补充说明
为什么echo显示1但判断失败?因为echo只会输出字符串中的可见字符,那些隐藏的控制字符、BOM头不会被显示,但在字符串比较时它们是实实在在存在的,所以导致$content == "1"不成立。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

