PHPfgets()函数

fgets() 函数是PHP中用于从打开的文件中读取一行的内置函数。它通常用于逐行读取文件内容,是文件处理中的常用函数。

语法

string fgets ( resource $handle [, int $length ] )

参数说明

参数 描述 是否必需 默认值
handle 文件指针,必须是有效的,由 fopen() 函数创建 -
length 可选。指定要读取的字节数。读取会在达到 length-1 字节、换行符或 EOF 时停止 1024 字节

返回值

  • 成功时返回读取的字符串(包含行结束符)。
  • 如果读取失败或到达文件末尾 (EOF),则返回 FALSE

注意事项

  • 文件指针必须通过 fopen() 成功打开。
  • 读取的行包括行结束符(如 \n 或 \r\n)。
  • 如果未指定 length 参数,默认读取直到行结束或 1024 字节。
  • 使用 feof() 检查是否到达文件末尾。

示例代码

示例1:基本使用 - 逐行读取文件
<?php
// 打开文件
$file = fopen("test.txt", "r") or die("无法打开文件!");

// 逐行读取直到文件结束
while(!feof($file)) {
    echo fgets($file) . "<br>";
}

// 关闭文件
fclose($file);
?>
示例2:指定读取长度
<?php
$file = fopen("test.txt", "r");

// 每次最多读取50个字节
if ($file) {
    while (($line = fgets($file, 50)) !== false) {
        echo $line . "<br>";
    }
    fclose($file);
}
?>
示例3:处理大文件 - 内存高效的方式
<?php
function readLargeFile($filename) {
    $file = fopen($filename, "r");
    if ($file) {
        while (($line = fgets($file)) !== false) {
            // 处理每一行
            echo htmlspecialchars($line) . "<br>";
        }
        fclose($file);
    } else {
        echo "无法打开文件: $filename";
    }
}

readLargeFile("large_data.txt");
?>
示例4:使用 fgets() 与 fgetcsv() 对比
<?php
// fgets() 读取整行
$file1 = fopen("data.txt", "r");
echo "使用 fgets() 读取:<br>";
while ($line = fgets($file1)) {
    echo "行内容: " . $line . "<br>";
}
fclose($file1);

echo "<hr>";

// fgetcsv() 读取CSV行
$file2 = fopen("data.csv", "r");
echo "使用 fgetcsv() 读取CSV:<br>";
while ($data = fgetcsv($file2)) {
    echo "字段: " . implode(", ", $data) . "<br>";
}
fclose($file2);
?>

常见错误处理

<?php
$filename = "data.txt";

// 检查文件是否存在
if (!file_exists($filename)) {
    die("文件 $filename 不存在");
}

// 尝试打开文件
$file = @fopen($filename, "r");
if (!$file) {
    die("无法打开文件 $filename");
}

// 安全读取
while (($line = fgets($file)) !== false) {
    echo $line;
}

// 检查是否因错误而停止
if (!feof($file)) {
    echo "错误: 读取意外终止";
}

fclose($file);
?>

与类似函数的比较

函数 描述 区别
fgets() 读取一行,包含行结束符 保留行结束符
fgetss() 读取一行并剥离 HTML/PHP 标签 已废弃,PHP 7.3+ 移除
fgetcsv() 从 CSV 文件读取一行并解析为数组 专用于 CSV 格式
file() 将整个文件读入数组 一次性读取,内存消耗大
重要提示

从 PHP 8.0.0 开始,fgets() 在失败时抛出 ValueError 异常,而之前返回 FALSE。建议使用 try-catch 进行错误处理。