[請益] feof fgets讀不到檔案的狀況下

看板PHP作者 (霹靂狗)時間9年前 (2016/08/17 23:55), 編輯推噓4(4015)
留言19則, 5人參與, 最新討論串1/1
程式碼如下 $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

08/18 00:15, , 1F
進迴圈前檢查 $file, 這跟 fopen 比較有關
08/18 00:15, 1F

08/18 00:15, , 2F
反而跟 feof/fgets 無關; 他們只是在說你給了一個奇怪東西
08/18 00:15, 2F

08/18 00:16, , 3F
fopen 在開檔失敗時會回傳 FALSE, 因此用個 if($file){}
08/18 00:16, 3F

08/18 00:16, , 4F
包起來即可
08/18 00:16, 4F

08/18 00:54, , 5F
感謝 用if包起來就正常了
08/18 00:54, 5F

08/18 09:41, , 6F
這種C語言式的讀檔到底是有什麼好的
08/18 09:41, 6F

08/18 09:42, , 7F
低階卡厲害 越低階越厲害 這樣? X(
08/18 09:42, 7F

08/18 11:07, , 8F
如果是大檔要作分段進度或分散取用還可以理解
08/18 11:07, 8F

08/18 12:25, , 9F
有人這樣寫讀取部份遠端檔頭判斷jpeg圖片大小 很厲害
08/18 12:25, 9F

08/18 12:30, , 11F
但一般使用真是大可不必 都有file()這種接近作弊的東東
08/18 12:30, 11F

08/18 12:32, , 12F
好用了 怕浪費空間file_get_contents()還可以設
08/18 12:32, 12F

08/18 12:32, , 13F
offset/maxlength
08/18 12:32, 13F

08/18 14:13, , 14F
要讀幾G或幾10G的 log 的時候底層操作是必要的
08/18 14:13, 14F

08/18 14:14, , 15F
雖然我偏好 $fp=popen('zcat yymmdd*.gz','r')
08/18 14:14, 15F

08/18 14:18, , 16F
當然有個幾十幾百G RAM 的時候可以用 file() 來盡情揮霍..
08/18 14:18, 16F

08/18 14:30, , 17F
那也太極端
08/18 14:30, 17F

08/18 14:31, , 18F
這是我家的常態...
08/18 14:31, 18F

08/18 15:07, , 19F
小檔案是完全沒必要這麼搞,只是有需要的場合也不少(滾動
08/18 15:07, 19F
文章代碼(AID): #1Nj8a865 (PHP)
文章代碼(AID): #1Nj8a865 (PHP)