[请益] feof fgets读不到档案的状况下

楼主: piligo (霹雳狗)   2016-08-17 23:55:50
程式码如下
$file = fopen("test.txt","r");
while (!feof($file)) {
$value = fgets($file);
print $value . "<br>";
}
fclose($file);
当test.txt不存在时,就会进入无限回圈的产生error log,导致整个磁盘空间被log塞爆
log内容就是下面这两行一直无限回圈
PHP message: PHP Warning: feof() expects parameter 1 to be resource
PHP message: PHP Warning: fgets() expects parameter 1 to be resource
请问,该如何避免读取的档案不存在所延伸的log塞爆问题
谢谢
作者: LPH66 (-6.2598534e+18f)   2016-08-18 00:15:00
进循环前检查 $file, 这跟 fopen 比较有关反而跟 feof/fgets 无关; 他们只是在说你给了一个奇怪东西fopen 在开档失败时会回传 FALSE, 因此用个 if($file){}包起来即可
楼主: piligo (霹雳狗)   2016-08-18 00:54:00
感谢 用if包起来就正常了
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-08-18 09:41:00
这种C语言式的读档到底是有什么好的低阶卡厉害 越低阶越厉害 这样? X(
作者: shadowjohn (转角遇到爱)   2016-08-18 11:07:00
如果是大档要作分段进度或分散取用还可以理解
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-08-18 12:25:00
有人这样写读取部份远端档头判断jpeg图片大小 很厉害http://php.net/manual/en/function.getimagesize.php但一般使用真是大可不必 都有file()这种接近作弊的东东好用了 怕浪费空间file_get_contents()还可以设offset/maxlength
作者: GALINE (天真可爱CQD)   2016-08-18 14:13:00
要读几G或几10G的 log 的时候底层操作是必要的虽然我偏好 $fp=popen('zcat yymmdd*.gz','r')当然有个几十几百G RAM 的时候可以用 file() 来尽情挥霍..
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-08-18 14:30:00
那也太极端
作者: GALINE (天真可爱CQD)   2016-08-18 14:31:00
这是我家的常态...小档案是完全没必要这么搞,只是有需要的场合也不少(滚动

Links booklink

Contact Us: admin [ a t ] ucptt.com