$file1 = new 'SplFileObject('some file');
while( !$file1->eof() ){
$data = $file1->fgets();
if( !$file1->eof() ){
echo $data;
}
}
fgets(( 不会步入文件中的下一行吗?如果是这样,为什么文件仍然传递第二个 !$file 1->eof(( 语句?这也发生在 ->valid(( 中。
feof/SplFileObject::eof 测试文件句柄/流是否在 EOF 位置。
您的源文件在最后一个数据行之后有一个换行符,fgets(( 就在那里停止。但是EOF位置形象地说是最后一次读取操作之后的一个位置。因此,下一个 fgets(((以及随后的 read(((将返回 0 个字节,只有这样文件才处于 EOF 位置,feof(( 将返回 true。
在您的具体示例(纳斯达克上市.txt(中,只需测试$data是否为 ==='' 而不是 $file 1->eof(( 可能就足够了,因为该文件中似乎没有其他 emtpy 行。
每次
循环运行时,您都会覆盖$data
。试试这个: $data .= $file1->fgets();