作者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/m.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