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 文件系统函数。