PHP 8.5.0 Alpha 2 available for testing

SplFileObject::fgets

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

SplFileObject::fgetsПолучает строку из файла

Описание

public SplFileObject::fgets(): string

Получает строку из файла.

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Возвращает строку, содержащую следующую строку из файла.

Ошибки

Выбрасывает RuntimeException, если файл не может быть прочитан.

Примеры

Пример #1 Пример использования SplFileObject::fgets()

Этот пример построчно выводит содержимое file.txt.

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

Смотрите также

Добавить

Примечания пользователей 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