这段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: 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计数器代码哪里错了,为何其中一行注释后就不好使】 这样不就可以了吗。。
推荐阅读
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 求大神帮我破解这段数字密码794497,2937959529,9999728,4392
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 求助!PHP开发,怎么样才能具备在有千万级流量网站开发环境下的基本工作能力
- 这段代码中对 vector 的访问为啥不会越界
- PHP程序员岗位招聘面试题有哪些
- 请问这段代码是啥意思,从一个仿造网站上下载的软件里面的,对电脑有危害吗
- 2017年各种语言的就业形势怎样(Android,iOS,PHP,Java,前端)
- Discuz、PHPWind之类BBS程序哪个运行打开最高效
- 为啥PHP社区鲜有异步队列,分布式计算,数据分析的项目和讨论