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 比比较文件名更可靠。这有助于检测硬链接。
最佳实践
- 错误处理: 始终检查 fstat 是否返回 false。
- 资源管理: 获取统计信息后关闭文件。
- 性能: 如果需要多次使用结果,请进行缓存。
- 安全性: 在打开文件之前验证文件路径。
来源
本教程通过实际示例介绍了 PHP fstat 函数的使用,展示了它在文件信息检索方面的应用。
作者
列出 所有 PHP 文件系统函数。