php feof函數用法與注意事項
來源:程序員人生 發布時間:2013-10-11 19:45:52 閱讀次數:2732次
eof() 函數檢測是否已到達文件末尾(eof).
如果文件指針到了 EOF 或者出錯時則返回 TRUE,否則返回一個錯誤(包括 socket 超時),其它情況則返回 FALSE.
語法:feof(file)
參數 描述
file 必需,規定要檢查的打開文件.
說明:file 參數是一個文件指針,這個文件指針必須有效,并且必須指向一個由 fopen() 或 fsockopen() 成功打開(但還沒有被 fclose() 關閉)的文件.
- <?php
- $file = fopen("test.txt", "r");
-
-
- while(! feof($file))
- {
- echo fgets($file). "<br />";
- }
-
- fclose($file);
- ?>
-
- if(file_exists($pmr_config["datasetfile"])){
- $tmp_counter = 0;
- $hd = fopen($pmr_config["datasetfile"], "r");
- if($hd !== FALSE){
- while (!feof($hd)) {
- $buffer = fgets($hd);
- if($tmp_counter >= $seq){
- $result[] = $buffer;
- }
- $tmp_counter++;
-
- if($tmp_counter >=$seq + $size){
- break;
- }
- }
- }else{
- echo "warning:open file {$pmr_config["datasetfile"]} failed!PHP_EOL";
- }
- }else{
- echo "warning:file {$pmr_config["datasetfile"]} does not exsits!PHP_EOL";
- }
其中當讀取行數包括文件結尾的時候,$result數組中總會比期望的內容多出來一個元素:
(boolean)false
按說,如果讀取到最后一行,feof函數會返回TRUE,然后while循環就退出了,為什么不是呢?
1
while (!feof($hd)) {
事情原來是這樣子的:
- <?php
-
- $file = @fopen("no_such_file", "r");
-
-
- while (!feof($file)) {
- }
-
- fclose($file);
- ?>
feof() is, in fact, reliable. However, you have to use it carefully in conjunction with fgets(). A common (but incorrect) approach is to try something like this:
- <?
- $fp = fopen("myfile.txt", "r");
- while (!feof($fp)) {
- $current_line = fgets($fp);
-
- }
- fclose($fp);
- ?>
提示和注釋:
提示:feof() 函數對遍歷長度未知的數據很有用。
注意:如果服務器沒有關閉由 fsockopen() 所打開的連接,feof() 會一直等待直到超時而返回 TRUE,默認的超時限制是 60 秒,可以使用 stream_set_timeout() 來改變這個值.
注意:如果傳遞的文件指針無效可能會陷入無限循環中,因為 EOF 不會返回 TRUE.
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈