这段PHP计数器代码哪里错了,为何其中一行注释后就不好使

为了方便描述,我粘贴到我的编辑器里加了个行号:这段PHP计数器代码哪里错了,为何其中一行注释后就不好使

你把第 15 行注释掉之后,当文件为空时,输出「空」并写入 0 这里我想你应该能理解。而你的疑问应该是在于为什么第二次执行时没有输出,并且文件也变为空白。其实是这么一个过程:由于你把第 15 行注释了,那么第 16 行的 $num = fgets($v, 10); 中的 $v 就会使用第一句 if ($v = fopen("num.txt","r")) 中的 $v。在第 5 行中,你已经执行过一遍 $num=fgets($v, 10); 了,所以文件的指针会向后移 10 位,当然你的文件只有一个字符「0」,所以实际上早已移到文件末尾(EOF)了。此时当你在 16 行中再试图通过 fgets 读取 $v,就会返回 false。这段PHP计数器代码哪里错了,为何其中一行注释后就不好使

PHP: fgets - Manual所以此时 $num 是 false,即使你后面再 $num++,也还是 false。当你在第 18 行 echo 以及第 21 行写入这个 boolean 类型的值时,就会什么都没有,所以才会出现「空」和「0」反复出现。这类问题建议到 http://segmentfault.com 去问,不太适合。
■网友
这段代码真是垃圾啊。。你为什么要反复 fopen() 同一个文件啊
■网友
因为读取文件的时候相当于一个流,读取了一次就不可能再读取第二次,就像你倒一桶水不可能再倒一次,除非你把水倒回去,这时候就要用到函数fseek,回到你的初始状态,即读取指针在文件头的状态,就可以了。真的,这代码要多烂有多烂啊……
■网友
去 stackoverflow。。。 如果能上去的话。。。
■网友
代码确实有问题,一直在重复读取num.txt,需要精简一下。
$file="1.log"; $num= file_get_contents($file);if(!$num){echo "空";$num=\u0026#39;0\u0026#39;;}file_put_contents($file,($num+1));
【这段PHP计数器代码哪里错了,为何其中一行注释后就不好使】 这样不就可以了吗。。


    推荐阅读