【发布时间】:2015-12-27 03:21:04
【问题描述】:
$file1 = new \SplFileObject('some file');
while( !$file1->eof() ){
$data = $file1->fgets();
if( !$file1->eof() ){
echo $data;
}
}
fgets() 不会跳到文件的下一行吗?如果是这样,为什么文件仍然通过第二个 !$file1->eof() 语句?这也发生在 ->valid() 中。
【问题讨论】:
-
见3v4l.org/clqTE - 你期望什么输出?
-
这是我所期望的,但我一直在尝试的文件仍然运行最后一行。这是有问题的文件:ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt
-
File Creation Time: 1224201521:32|||||后面有一个换行符(实际上是 0x0d 0x0A)。 fgets() 停止读取 exactly 那里。但是 eof() 测试文件指针是否位于 EOF 位置,这形象地说是在最后一次读取操作之后的一个位置。对 fgets() 的下一次调用(以及随后的 read())将返回 0 个字节,然后文件句柄/流位于 EOF 位置。 -
伙计,我应该检查一下。不知道为什么我没有想到这一点,一直在扯我的头发。如果可以的话,把它作为这个问题的答案。
标签: php spl splfileobject