ZetCode

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 是链接路径的长度。

最佳实践

来源

PHP stat 文档

本教程通过实际示例介绍了 PHP stat 函数,展示了其在文件信息检索中的用法。

作者

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

列出 所有 PHP 文件系统函数