SplFileObject::fgets

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SplFileObject::fgetsファイルから 1 行取り出す

説明

public SplFileObject::fgets(): string

ファイルから 1 行取り出します。

パラメータ

この関数にはパラメータはありません。

戻り値

ファイルから次の行を含む文字列を返します。

エラー / 例外

ファイルが読み込みできない場合 RuntimeException がスローされます。

例1 SplFileObject::fgets() の例

この例では file.txt の内容が 1 行ごとに出力されます。

<?php
$file
= new SplFileObject("file.txt");
while (!
$file->eof()) {
echo
$file->fgets();
}
?>

参考

add a note

User Contributed Notes 3 notes

up
5
Lucas Bustamante
3 years ago
Notice that the behavior of fgets after a seek changed on PHP 8.0.10, if you seek to line 50 and run fgets, it will give you line 50, while on PHP 5.1~8.0.0 it would give you line 51:<?php$file = new SplTempFileObject();for ($i = 0; $i < 100; $i++) {    $file->fwrite("Foo $i\n");}$file->seek(50);echo json_encode(array(    array('line' => $file->key(), 'contents' => trim($file->fgets())),    array('line' => $file->key(), 'contents' => trim($file->fgets())),    array('line' => $file->key(), 'contents' => trim($file->fgets())),), JSON_PRETTY_PRINT);?>Results:PHP  8.0.1+[    {        "line": 50,        "contents": "Foo 50"    },    {        "line": 50,        "contents": "Foo 51"    },    {        "line": 51,        "contents": "Foo 52"    }]PHP 5.1 to 8.0.0[    {        "line": 50,        "contents": "Foo 51"    },    {        "line": 51,        "contents": "Foo 52"    },    {        "line": 52,        "contents": "Foo 53"    }]
up
5
Chris Johnson
7 years ago
Note that this method will cause a PHP fatal error if the file being read contains no recognizable line termination characters and is larger than the allowable memory size for PHP to allocate, i.e. memory_limit set in php.ini or similar.  In other words, PHP keeps reading until it finds a line termination, if it runs out of memory first, it will throw a fatal error.This is different from the file resource fread() function, which allows an optional maximum length argument to be passed to limit this behavior.
up
4
Lucas Bustamante
3 years ago
I forgot to mention in my previous note about PHP PHP 8.0.10, that you can use $file->current(); $file->next(); as a replacement for $file->fgets(); that works consistently from PHP 5.1 to 8.0.1+ after a seek():<?php$file = new SplTempFileObject();for ($i = 0; $i < 100; $i++) {    $file->fwrite("Foo $i\n");}$file->seek(50);print_r(array(    array('line' => $file->key(), 'contents' => trim($file->current()), 'triggerNext' => $file->next()),    array('line' => $file->key(), 'contents' => trim($file->current()), 'triggerNext' => $file->next()),    array('line' => $file->key(), 'contents' => trim($file->current()), 'triggerNext' => $file->next()),));?>PHP 5.1 to 8.0.1+:[    {        "line": 50,        "contents": "Foo 50"    },    {        "line": 51,        "contents": "Foo 51"    },    {        "line": 52,        "contents": "Foo 52"    }]
To Top