PHP fread 函数
最后修改于 2025 年 4 月 3 日
PHP 的 fread 函数从一个打开的文件指针中读取数据。它是一个二进制安全函数,最多读取指定数量的字节。
基本定义
fread 函数从文件指针中读取数据。它接受两个参数:文件句柄和要读取的长度。
语法:fread(resource $stream, int $length): string|false。如果失败,函数返回读取的字符串或 false。
基本的 fread 示例
这展示了使用 fread 读取文件的最简单方法。
basic_fread.php
<?php declare(strict_types=1); $filename = "example.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); echo $contents;
这读取了 example.txt 的全部内容。我们首先打开文件,读取它,然后关闭句柄。完成操作后,始终关闭文件句柄。
读取固定长度
fread 可以从文件中读取特定数量的字节。
fixed_length.php
<?php declare(strict_types=1); $filename = "data.bin"; $handle = fopen($filename, "rb"); $chunk = fread($handle, 1024); fclose($handle); echo "Read " . strlen($chunk) . " bytes";
这里我们从一个二进制文件中读取 1024 个字节。“rb”模式确保在所有平台上进行二进制安全读取。
逐行读取
结合 fread 与其他函数进行逐行读取。
line_by_line.php
<?php
declare(strict_types=1);
$filename = "lines.txt";
$handle = fopen($filename, "r");
while (!feof($handle)) {
$line = fread($handle, 4096); // Read in chunks
echo $line;
}
fclose($handle);
这以 4096 字节的块读取文件,直到 EOF。对于文本文件,请考虑使用 fgets 代替逐行读取。
二进制文件读取
fread 是读取二进制文件(如图像)的理想选择。
binary_file.php
<?php
declare(strict_types=1);
$filename = "image.jpg";
$handle = fopen($filename, "rb");
$data = fread($handle, filesize($filename));
fclose($handle);
header("Content-Type: image/jpeg");
echo $data;
这读取一个 JPEG 图像并直接输出。二进制模式确保在读取过程中不会发生数据损坏。
带偏移量读取
结合 fread 与 fseek 实现随机访问。
offset_read.php
<?php declare(strict_types=1); $filename = "largefile.dat"; $handle = fopen($filename, "rb"); fseek($handle, 1024); // Skip first 1KB $data = fread($handle, 512); // Read 512 bytes fclose($handle); echo "Read " . strlen($data) . " bytes from offset 1024";
这演示了从特定的文件偏移量读取数据。对于只需要某些部分的大文件很有用。
最佳实践
- 错误处理: 始终检查 fopen 是否成功。
- 资源清理: 使用 try-finally 进行句柄清理。
- 内存限制: 读取大文件时请注意。
- 二进制安全: 对二进制文件使用“b”模式。
- 性能: 选择合适的块大小。
来源
本教程介绍了 PHP 的 fread 函数,并附带了实际示例,展示了它在不同场景中的用法。
作者
列出 所有 PHP 文件系统函数。