PHP | fgets 函数
怎样按行读取文件
最近更新时间 2021-01-01 12:29:46
fgets 函数从文件指针中读取一行。
fgets() 函数接收两个参数,其中文件指针为必填项。函数返回读取的字符串,如果遇到错误或者没有更多数据返回 false。
函数定义
fgets ( resource $handle [, int $length ] ) : string
// 源文件位于:ext/standard/file.c
# 函数定义
PHPAPI PHP_FUNCTION(fgets)
{
...
if (len_is_null) {
/* ask streams to give us a buffer of an appropriate size */
buf = php_stream_get_line(stream, NULL, 0, &line_len);
if (buf == NULL) {
RETURN_FALSE;
}
// TODO: avoid reallocation ???
RETVAL_STRINGL(buf, line_len);
efree(buf);
} else {
if (len <= 0) {
zend_argument_value_error(2, "must be greater than 0");
RETURN_THROWS();
}
str = zend_string_alloc(len, 0);
if (php_stream_get_line(stream, ZSTR_VAL(str), len, &line_len) == NULL) {
zend_string_efree(str);
RETURN_FALSE;
}
/* resize buffer if it's much larger than the result.
* Only needed if the user requested a buffer size. */
if (line_len < (size_t)len / 2) {
str = zend_string_truncate(str, line_len, 0);
} else {
ZSTR_LEN(str) = line_len;
}
RETURN_NEW_STR(str);
}
}
参数
- checkhandle - 文件指针。文件指针必须有效,并且是通过 fopen() 或 fsockopen() 函数成功打开的文件(并还未由 fclose() 关闭)。
- checklength - 取回该长度的数据。可选参数。
返回值
- checkstring - 从指针 handle 指向的文件中读取 length - 1 字节后返回字符串。错误或者文件结尾返回 false。
示例1: - 使用 fgets() 函数从文件指针中读取一行。
<?php
/**
* PHP 使用 fgets() 函数从文件指针中读取一行。
*
* @since Version 1.0.0
* @filesource
*/
// 打开文件
$handle = fopen('foo.txt', 'r');
// 按行读取文件
if ($handle) {
while (($line = fgets($handle)) !== false) {
}
// 检测文件是否到结尾,防止异常终止
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
// 关闭文件
fclose($handle);
}