$file1 = new \SplFileObject('some file');
while( !$file1->eof() ){
$data = $file1->fgets();
if( !$file1->eof() ){
echo $data;
}
}
fgets() はファイルの次の行に進みませんか? もしそうなら、なぜファイルはまだ 2 番目の !$file1->eof() ステートメントを渡すのですか? これは ->valid() でも発生します。