ZetCode

PHP ftell 函数

最后修改于 2025 年 4 月 3 日

PHP 的 ftell 函数返回打开文件中文件指针的当前位置。这对于随机文件访问操作至关重要。

基本定义

ftell 函数返回给定文件句柄中文件指针的当前位置。它以字节为单位测量从开始位置的位置。

语法:ftell(resource $stream): int|false。 失败时返回位置为整数或 false。 适用于使用 fopen 打开的文件。

基本 ftell 示例

这展示了 ftell 的最简单用法,以获取指针位置。

basic_ftell.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
$position = ftell($file);

echo "Initial position: $position"; // Outputs: Initial position: 0
fclose($file);

这表明当文件首次打开时,指针从位置 0 开始。该位置以字节为单位从文件的开头测量。

读取数据之后

ftell 显示了读取如何使文件指针向前移动。

after_read.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
fread($file, 10); // Read 10 bytes
$position = ftell($file);

echo "Position after read: $position"; // Outputs position 10
fclose($file);

读取 10 个字节后,ftell 返回 10。指针会在读/写操作期间自动移动。

使用 fseek

ftell 可以验证由 fseek 设置的位置。

with_fseek.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
fseek($file, 25);
$position = ftell($file);

echo "Position after seek: $position"; // Outputs position 25
fclose($file);

这演示了 ftell 如何确认手动指针定位。位置与 fseek 的 25 字节偏移量匹配。

写入模式

在写入模式下,ftell 显示当前写入位置。

writing_mode.php
<?php

declare(strict_types=1);

$file = fopen('output.txt', 'w');
fwrite($file, 'Hello');
$position = ftell($file);

echo "Position after write: $position"; // Outputs position 5
fclose($file);

写入 "Hello" (5 个字节) 后,ftell 返回 5。指针移动到已写入数据的末尾。

追加模式

在追加模式下,ftell 始终显示结束位置。

append_mode.php
<?php

declare(strict_types=1);

$file = fopen('log.txt', 'a');
$position = ftell($file);

echo "Initial append position: $position"; // Shows file size
fwrite($file, "New entry\n");
$position = ftell($file);

echo "New append position: $position"; // Shows new end position
fclose($file);

追加模式从文件的末尾开始。ftell 在每次写入操作后反映当前的结束位置。

错误处理

ftell 在失败时返回 false,应该进行检查。

error_handling.php
<?php

declare(strict_types=1);

$file = fopen('nonexistent.txt', 'r');
if ($file === false) {
    die("File open failed");
}

$position = ftell($file);
if ($position === false) {
    die("ftell failed");
}

echo "Position: $position";
fclose($file);

这显示了适当的错误处理。始终检查 ftell 是否返回 false,这表示错误情况。

最佳实践

来源

PHP ftell 文档

本教程介绍了 PHP ftell 函数,并提供了实际示例,展示了在不同场景中跟踪文件指针位置。

作者

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

列出 所有 PHP 文件系统函数