[英]Why does this print the last line? (SplFileObject)
$file1 = new \SplFileObject('some file');
while( !$file1->eof() ){
$data = $file1->fgets();
if( !$file1->eof() ){
echo $data;
}
}
fgets()不會跳到文件的下一行嗎? 如果是這樣,為什么文件仍然傳遞第二個$ file1-> eof()語句? 這也與-> valid()一起發生。
feof / SplFileObject :: eof測試文件句柄/流是否在EOF位置。
您的源文件在最后一條數據行之后有一個換行符,並且fgets()停在那里。 但是,在最后一次讀取操作之后,EOF位置象征性地講了一個位置。 因此,下一個fgets()(以及隨后的read())將返回0字節, 然后文件才位於EOF位置,feof()將返回true。
在您的具體示例(nasdaqlisted.txt)中,僅測試$ data是否===''而不是$ file1-> eof()可能就足夠了,因為該文件中似乎沒有其他空行。
您每次循環運行時都會覆蓋$data
。 試試這個: $data .= $file1->fgets();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.