看板 PHP 關於我們 聯絡資訊
程式碼如下 $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://www.ptt.cc/bbs/PHP/M.1471449352.A.185.html
LPH66: 進迴圈前檢查 $file, 這跟 fopen 比較有關 08/18 00:15
LPH66: 反而跟 feof/fgets 無關; 他們只是在說你給了一個奇怪東西 08/18 00:15
LPH66: fopen 在開檔失敗時會回傳 FALSE, 因此用個 if($file){} 08/18 00:16
LPH66: 包起來即可 08/18 00:16
piligo: 感謝 用if包起來就正常了 08/18 00:54
MOONRAKER: 這種C語言式的讀檔到底是有什麼好的 08/18 09:41
MOONRAKER: 低階卡厲害 越低階越厲害 這樣? X( 08/18 09:42
shadowjohn: 如果是大檔要作分段進度或分散取用還可以理解 08/18 11:07
MOONRAKER: 有人這樣寫讀取部份遠端檔頭判斷jpeg圖片大小 很厲害 08/18 12:25
MOONRAKER: 但一般使用真是大可不必 都有file()這種接近作弊的東東 08/18 12:30
MOONRAKER: 好用了 怕浪費空間file_get_contents()還可以設 08/18 12:32
MOONRAKER: offset/maxlength 08/18 12:32
GALINE: 要讀幾G或幾10G的 log 的時候底層操作是必要的 08/18 14:13
GALINE: 雖然我偏好 $fp=popen('zcat yymmdd*.gz','r') 08/18 14:14
GALINE: 當然有個幾十幾百G RAM 的時候可以用 file() 來盡情揮霍.. 08/18 14:18
MOONRAKER: 那也太極端 08/18 14:30
GALINE: 這是我家的常態... 08/18 14:31
GALINE: 小檔案是完全沒必要這麼搞,只是有需要的場合也不少(滾動 08/18 15:07