PHP stat 函数
最后修改于 2025 年 4 月 3 日
PHP stat 函数用于检索文件状态信息。它返回一个包含文件或符号链接详细统计信息的数组。
基本定义
stat 函数收集文件信息。它返回一个包含数值和字符串索引的关联数组,其中包含文件统计信息。
语法:stat(string $filename): array|false。失败时返回 false。该数组包含 13 个元素,同时具有数值和命名键。
基本 stat 示例
此示例显示了如何使用 stat 获取基本文件信息。
basic_stat.php
<?php
declare(strict_types=1);
$file = 'example.txt';
$stats = stat($file);
if ($stats !== false) {
echo "File size: " . $stats['size'] . " bytes\n";
echo "Last modified: " . date('Y-m-d H:i:s', $stats['mtime']);
}
这将检索文件大小和修改时间。size 以字节为单位,mtime 是转换为可读格式的 Unix 时间戳。
检查文件类型
我们可以使用 stat 来确定路径是文件还是目录。
file_type.php
<?php
declare(strict_types=1);
$path = 'example.txt';
$stats = stat($path);
if ($stats !== false) {
$mode = $stats['mode'];
if (($mode & 0x4000) === 0x4000) {
echo "This is a directory";
} else {
echo "This is a regular file";
}
}
这会检查文件模式位以确定类型。位掩码 0x4000 在类 Unix 系统中标识目录。
文件权限
stat 可用于检查文件权限。
file_permissions.php
<?php
declare(strict_types=1);
$file = 'example.txt';
$stats = stat($file);
if ($stats !== false) {
$permissions = $stats['mode'] & 0777;
echo "Permissions: " . decoct($permissions);
}
这会从模式中提取权限位。八进制表示显示了类似 644 或 755 的 Unix 风格权限。
文件访问时间
该函数提供三种不同的文件访问时间戳。
file_times.php
<?php
declare(strict_types=1);
$file = 'example.txt';
$stats = stat($file);
if ($stats !== false) {
echo "Created: " . date('Y-m-d H:i:s', $stats['ctime']) . "\n";
echo "Modified: " . date('Y-m-d H:i:s', $stats['mtime']) . "\n";
echo "Accessed: " . date('Y-m-d H:i:s', $stats['atime']);
}
这将显示创建、修改和访问时间。请注意,在 Unix 上 ctime 是 inode 更改时间,而不是创建时间。
符号链接统计
stat 默认会跟踪符号链接。使用 lstat 获取链接信息。
symlink_stats.php
<?php
declare(strict_types=1);
$link = 'symlink_to_file';
$stats = lstat($link);
if ($stats !== false) {
echo "Link size: " . $stats['size'] . " bytes\n";
echo "Is symlink: " . (is_link($link) ? 'Yes' : 'No');
}
这显示了如何获取符号链接本身而不是目标文件的信息。这里的 size 是链接路径的长度。
最佳实践
- 错误处理: 始终检查 stat 是否返回 false。
- 性能: 缓存结果以便重复访问。
- 安全: 在处理路径之前进行验证。
- 跨平台: 注意系统差异。
来源
本教程通过实际示例介绍了 PHP stat 函数,展示了其在文件信息检索中的用法。
作者
列出 所有 PHP 文件系统函数。