ZetCode

PHP fstat 函数

最后修改于 2025 年 4 月 3 日

PHP fstat 函数从打开的文件指针检索文件状态信息。它提供诸如大小、权限和时间戳等详细信息。

基本定义

fstat 函数返回一个包含文件统计信息的数组。它需要一个打开的文件资源句柄作为其唯一参数。

语法:fstat(resource $stream): array|false。该函数成功时返回一个关联数组,失败时返回 false。

基本 fstat 示例

此示例显示了如何使用 fstat 获取基本文件信息。

basic_fstat.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
$stats = fstat($file);

print_r($stats);
fclose($file);

此代码打开一个文件并打印其统计信息。输出包括文件大小、访问时间和其它元数据。使用后务必关闭文件。

获取文件大小

此示例演示了如何从 fstat 结果中提取文件大小。

file_size.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
$stats = fstat($file);

if ($stats !== false) {
    echo "File size: " . $stats['size'] . " bytes";
}
fclose($file);

“size”索引包含以字节为单位的文件大小。我们首先检查 fstat 是否成功,然后再访问数组。这是错误处理的好习惯。

检查文件修改时间

此示例展示了如何获取文件的最后修改时间。

modification_time.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
$stats = fstat($file);

if ($stats !== false) {
    $mtime = date('Y-m-d H:i:s', $stats['mtime']);
    echo "Last modified: " . $mtime;
}
fclose($file);

“mtime”索引包含最后修改的 Unix 时间戳。我们使用 date() 函数将其格式化为人类可读的格式。这有助于文件监控系统。

文件权限示例

此示例演示了如何使用 fstat 检查文件权限。

file_permissions.php
<?php

declare(strict_types=1);

$file = fopen('example.txt', 'r');
$stats = fstat($file);

if ($stats !== false) {
    $permissions = decoct($stats['mode'] & 0777);
    echo "File permissions: " . $permissions;
}
fclose($file);

“mode”索引包含八进制格式的文件权限。我们将其与 0777 进行按位与操作以仅获取权限位。decoct() 函数将其转换为可读的八进制格式。

比较文件统计信息

此示例比较两个文件的统计信息,以检查它们是否相同。

compare_files.php
<?php

declare(strict_types=1);

$file1 = fopen('file1.txt', 'r');
$file2 = fopen('file2.txt', 'r');

$stats1 = fstat($file1);
$stats2 = fstat($file2);

if ($stats1['ino'] === $stats2['ino']) {
    echo "Files are the same (same inode)";
} else {
    echo "Files are different";
}

fclose($file1);
fclose($file2);

“ino”索引包含 inode 号,对于每个文件都是唯一的。比较 inode 比比较文件名更可靠。这有助于检测硬链接。

最佳实践

来源

PHP fstat 文档

本教程通过实际示例介绍了 PHP fstat 函数的使用,展示了它在文件信息检索方面的应用。

作者

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

列出 所有 PHP 文件系统函数