作者piligo (霹雳狗)
看板PHP
标题[请益] feof fgets读不到档案的状况下
时间Wed Aug 17 23:55:50 2016
程式码如下
$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塞爆问题
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.70.124.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1471449352.A.185.html
1F:推 LPH66: 进回圈前检查 $file, 这跟 fopen 比较有关 08/18 00:15
2F:→ LPH66: 反而跟 feof/fgets 无关; 他们只是在说你给了一个奇怪东西 08/18 00:15
3F:→ LPH66: fopen 在开档失败时会回传 FALSE, 因此用个 if($file){} 08/18 00:16
4F:→ LPH66: 包起来即可 08/18 00:16
5F:→ piligo: 感谢 用if包起来就正常了 08/18 00:54
6F:→ MOONRAKER: 这种C语言式的读档到底是有什麽好的 08/18 09:41
7F:→ MOONRAKER: 低阶卡厉害 越低阶越厉害 这样? X( 08/18 09:42
8F:→ shadowjohn: 如果是大档要作分段进度或分散取用还可以理解 08/18 11:07
9F:→ MOONRAKER: 有人这样写读取部份远端档头判断jpeg图片大小 很厉害 08/18 12:25
11F:→ MOONRAKER: 但一般使用真是大可不必 都有file()这种接近作弊的东东 08/18 12:30
12F:→ MOONRAKER: 好用了 怕浪费空间file_get_contents()还可以设 08/18 12:32
13F:→ MOONRAKER: offset/maxlength 08/18 12:32
14F:推 GALINE: 要读几G或几10G的 log 的时候底层操作是必要的 08/18 14:13
15F:→ GALINE: 虽然我偏好 $fp=popen('zcat yymmdd*.gz','r') 08/18 14:14
16F:→ GALINE: 当然有个几十几百G RAM 的时候可以用 file() 来尽情挥霍.. 08/18 14:18
17F:→ MOONRAKER: 那也太极端 08/18 14:30
18F:推 GALINE: 这是我家的常态... 08/18 14:31
19F:推 GALINE: 小档案是完全没必要这麽搞,只是有需要的场合也不少(滚动 08/18 15:07