ファイルを開いて行を読んでくる処理なんですが、
実在する行より1行多く読んできて、最後が空行になってしまいます。
次のような簡単なソースです。

$fp = fopen("data.txt", "r+");
 if ($fp){
  flock($fp, 2);
  while (!feof($fp)){
   $list[] = fgets($fp);
   $i++;
  }
 }
}

data.txtには3行の記述があり、最後の行もきちんと改行で終わり、
最後に余計な改行などは入っていません。

ところが、 $i が 4となってしまい、$listも、 $list[3]まで作られ、中身は空です。
PHPは前からやっていたんですがこうなったことはないのですが、
いったいどんな原因が考えられますか?