ZetCode

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 图像并直接输出。二进制模式确保在读取过程中不会发生数据损坏。

带偏移量读取

结合 freadfseek 实现随机访问。

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";

这演示了从特定的文件偏移量读取数据。对于只需要某些部分的大文件很有用。

最佳实践

来源

PHP fread 文档

本教程介绍了 PHP 的 fread 函数,并附带了实际示例,展示了它在不同场景中的用法。

作者

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

列出 所有 PHP 文件系统函数