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 条备注

Lucas Bustamante
2 年前
请注意,在 PHP 8.0.10 中,fseek 之后的 fgets 行为已更改,如果将 seek 设置为第 50 行并运行 fgets,它将返回第 50 行,而在 PHP 5.1~8.0.0 中,它将返回第 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);

?>

结果

PHP 8.0.1+
[
{
"line": 50,
"contents": "Foo 50"
},
{
"line": 50,
"contents": "Foo 51"
},
{
"line": 51,
"contents": "Foo 52"
}
]

PHP 5.1 到 8.0.0
[
{
"line": 50,
"contents": "Foo 51"
},
{
"line": 51,
"contents": "Foo 52"
},
{
"line": 52,
"contents": "Foo 53"
}
]
Chris Johnson
6 年前
请注意,如果正在读取的文件不包含可识别的行终止符,并且大于 PHP 可分配的内存大小(即 php.ini 或类似文件中设置的 memory_limit),则此方法将导致 PHP 致命错误。换句话说,PHP 会一直读取直到找到行终止符,如果首先用完内存,它将抛出一个致命错误。

这与文件资源 fread() 函数不同,fread() 函数允许传递一个可选的最大长度参数来限制这种行为。
Lucas Bustamante
2 年前
在我之前的关于 PHP 8.0.10 的备注中,我忘记提到,您可以在 seek() 之后使用 $file->current(); $file->next(); 作为 $file->fgets(); 的替代品,它可以在 PHP 5.1 到 8.0.1+ 上始终如一地工作。

<?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 到 8.0.1+

[
{
"line": 50,
"contents": "Foo 50"
},
{
"line": 51,
"contents": "Foo 51"
},
{
"line": 52,
"contents": "Foo 52"
}
]
To Top