[請益] 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