ZetCode

PHP fileatime 函数

最后修改于 2025 年 4 月 3 日

PHP 的 fileatime 函数获取文件的最后访问时间。它返回一个 Unix 时间戳,表示文件最后一次被访问的时间。

基本定义

fileatime 函数返回文件最后一次被访问的时间。它接受一个参数:文件名路径,以字符串形式表示。

语法: fileatime(string $filename): int|false。成功时返回 Unix 时间戳,失败时返回 false。需要文件存在并且有权限。

基本的 fileatime 示例

这展示了使用 fileatime 获取访问时间的最简单用法。

basic_fileatime.php
<?php

declare(strict_types=1);

$filename = "example.txt";
$accessTime = fileatime($filename);

if ($accessTime !== false) {
    echo "Last accessed: " . date("Y-m-d H:i:s", $accessTime);
} else {
    echo "Could not get access time";
}

这获取 "example.txt" 的访问时间并格式化它。如果文件不存在或无法访问,该函数将返回 false。

比较访问时间

我们可以比较两个文件的访问时间,以查看哪个文件最近被访问。

compare_times.php
<?php

declare(strict_types=1);

$file1 = "file1.txt";
$file2 = "file2.txt";

$time1 = fileatime($file1);
$time2 = fileatime($file2);

if ($time1 > $time2) {
    echo "$file1 was accessed more recently";
} elseif ($time2 > $time1) {
    echo "$file2 was accessed more recently";
} else {
    echo "Both files were accessed at the same time";
}

这比较了两个文件的访问时间。请注意,某些文件系统出于性能原因禁用了访问时间记录。

检查最近的访问

我们可以检查一个文件是否在某个时间段内被访问过。

recent_access.php
<?php

declare(strict_types=1);

$filename = "data.log";
$accessTime = fileatime($filename);
$oneDayAgo = time() - 86400; // 24 hours ago

if ($accessTime !== false && $accessTime > $oneDayAgo) {
    echo "File was accessed within the last 24 hours";
} else {
    echo "File not accessed recently or error occurred";
}

这检查文件是否在过去的 24 小时内被访问过。该示例使用 time() 函数获取当前时间戳进行比较。

处理错误

在使用文件系统函数时,适当的错误处理非常重要。

error_handling.php
<?php

declare(strict_types=1);

$filename = "nonexistent.txt";
$accessTime = fileatime($filename);

if ($accessTime === false) {
    if (!file_exists($filename)) {
        echo "File does not exist";
    } elseif (!is_readable($filename)) {
        echo "File is not readable";
    } else {
        echo "Unknown error getting access time";
    }
} else {
    echo "Last accessed: " . date("Y-m-d H:i:s", $accessTime);
}

这演示了全面的错误处理。当 fileatime 返回 false 时,我们检查文件是否存在以及是否可读。

与目录一起使用

fileatime 也可以用于目录,而不仅仅是文件。

directory_access.php
<?php

declare(strict_types=1);

$dir = "/var/www/html";
$accessTime = fileatime($dir);

if ($accessTime !== false) {
    echo "Directory last accessed: " . date("Y-m-d H:i:s", $accessTime);
    echo "<br>";
    echo "Days since last access: " . round((time() - $accessTime) / 86400);
} else {
    echo "Could not get directory access time";
}

这获取目录的访问时间并计算自上次访问以来的天数。在大多数系统上,目录访问时间的工作方式与文件访问时间类似。

最佳实践

来源

PHP fileatime 文档

本教程涵盖了 PHP 的 fileatime 函数,并提供了实际示例,展示了它在不同场景中的用法。

作者

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

列出 所有 PHP 文件系统函数