PHP feof 函数
最后修改于 2025 年 4 月 3 日
PHP 的 feof
函数用于检查是否已到达文件结尾。在 PHP 中顺序读取文件时,此功能至关重要。当文件指针位于文件结尾时,该函数返回 true。
基本定义
feof
函数在文件指针上测试文件结束。它接受一个参数:文件指针资源。如果到达文件结束,则返回 true。
语法: feof(resource $stream): bool
。该函数通常与 fgets
或 fread
等文件读取函数一起使用。
基本 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 响应,直到服务器关闭连接。网络流的行为可能与文件不同。需要处理超时和错误。
常见陷阱
- 过早的 EOF:在假定 EOF 之前,检查读取错误。
- 内存使用:读取大文件需要分块处理。
- 流状态:某些流可能无法正确发出 EOF 信号。
- 性能:避免在紧凑的循环中调用
feof
。
来源
本教程介绍了 PHP feof
函数,并提供了实际示例,展示了它与不同文件类型和流的用法。
作者
列出 所有 PHP 文件系统函数。