PHP使用strcmp对比文件行与'bye'无输出问题排查
解决PHP读取文件行与
strcmp对比无输出的问题 这问题我之前踩过坑!核心原因几乎都是从文件读取的行包含了隐藏的空白字符——比如换行符\n、回车符\r,甚至是制表符或者末尾的空格,导致strcmp对比纯字符串'bye'时不相等。
你可以先做个小测试:在循环里打印var_dump($line),会发现读取到的行可能是类似string(4) "bye\n"的结果,而直接写'bye'是string(3) "bye",长度都不一样,strcmp自然返回非0值,不会触发打印。
最直接的解决方案:用trim()清理行内容
trim()函数会去掉字符串首尾的所有空白字符(包括换行、回车、空格、制表符),修改你的代码如下:
// 打开文件 $file = fopen("your_file.txt", "r"); if ($file) { // 逐行读取 while (($line = fgets($file)) !== false) { // 清理首尾空白 $clean_line = trim($line); // 再用strcmp对比 if (strcmp($clean_line, 'bye') === 0) { echo $clean_line . PHP_EOL; } } fclose($file); }
其他可能的排查方向
- 如果用
trim()还是不行,检查文件是否带有UTF-8 BOM头:有些编辑器保存UTF-8文件时会自动加BOM(三个隐藏字节),这时候可以用substr($clean_line, 3)去掉前三个字节再对比。 - 也可以直接用松散比较
==(比如if ($clean_line == 'bye')),但strcmp在处理多字节字符时更严谨,推荐保留。
内容的提问来源于stack exchange,提问作者user6840144
相关产品推荐
相关产品推荐

