ZetCode

PHP feof 函数

最后修改于 2025 年 4 月 3 日

PHP 的 feof 函数用于检查是否已到达文件结尾。在 PHP 中顺序读取文件时,此功能至关重要。当文件指针位于文件结尾时,该函数返回 true。

基本定义

feof 函数在文件指针上测试文件结束。它接受一个参数:文件指针资源。如果到达文件结束,则返回 true。

语法: feof(resource $stream): bool。该函数通常与 fgetsfread 等文件读取函数一起使用。

基本 feof 示例

这展示了使用 feof 逐行读取文件的最简单用法。

basic_feof.php
<?php

declare(strict_types=1);

$file = fopen("example.txt", "r");

if ($file) {
    while (!feof($file)) {
        $line = fgets($file);
        echo $line;
    }
    fclose($file);
}

这会读取 "example.txt" 直到文件结尾。当 feof 返回 false 时,循环继续。读取后,务必使用 fclose 关闭文件。

读取二进制文件

feof 可以与 fread 一起用于二进制文件。

binary_file.php
<?php

declare(strict_types=1);

$file = fopen("image.jpg", "rb");
$buffer = "";

if ($file) {
    while (!feof($file)) {
        $buffer .= fread($file, 8192);
    }
    fclose($file);
}

// Process binary data in $buffer

这会以 8KB 的块读取二进制文件,直到文件结尾。 rb 模式确保在所有平台上都能正确读取二进制文件。可以调整缓冲区大小。

错误处理

在使用 feof 时,适当的错误处理非常重要。

error_handling.php
<?php

declare(strict_types=1);

$filename = "nonexistent.txt";
$file = @fopen($filename, "r");

if ($file === false) {
    die("Cannot open file: $filename");
}

while (!feof($file)) {
    $line = fgets($file);
    if ($line === false) {
        break; // Handle read error
    }
    echo $line;
}

fclose($file);

这展示了正确的文件打开检查和读取错误处理。 @ 抑制警告,但我们显式检查失败情况。务必验证文件操作。

CSV 文件处理

feof 可以与 CSV 文件处理一起使用。

csv_processing.php
<?php

declare(strict_types=1);

$file = fopen("data.csv", "r");

if ($file) {
    while (!feof($file)) {
        $row = fgetcsv($file);
        if ($row === false) {
            continue; // Skip empty lines
        }
        print_r($row);
    }
    fclose($file);
}

这会读取 CSV 文件直到文件结尾。 fgetcsv 在空行或错误时返回 false,因此我们跳过它们。务必处理潜在的 CSV 解析问题。

网络流示例

feof 也适用于网络流。

network_stream.php
<?php

declare(strict_types=1);

$socket = fsockopen("www.example.com", 80);
if ($socket) {
    fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n");
    
    while (!feof($socket)) {
        echo fgets($socket);
    }
    fclose($socket);
}

这会读取 HTTP 响应,直到服务器关闭连接。网络流的行为可能与文件不同。需要处理超时和错误。

常见陷阱

来源

PHP feof 文档

本教程介绍了 PHP feof 函数,并提供了实际示例,展示了它与不同文件类型和流的用法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数