PHP 检查符号链接文件的年龄

PHP Check how old a symlink file is

我有一个下载脚本,它使用 symlink() 创建一个 link 到一个文件。我正在尝试创建一个脚本来删除 link 1 小时后的内容。但是,当我尝试使用 filemtime() 检查文件的年龄时,我只得到实际原始(目标)文件的修改时间,而不是 symlink.

这是我当前的代码:

$filename = '/var/www/html/files/myfile.rar';

if (file_exists($filename)) {
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}

我应该怎么做才能检查实际 symlink 而不是文件的最后修改时间?

使用PHP函数lstat():

$stat = lstat('/var/www/html/files/myfile.rar');
print_r($stat);

为您提供大量信息,例如 atime(上次访问)、ctime(创建时间)和 mtime(上次修改)。

可能无法获取 symlink 的属性。您可以创建文件来存储有关 link 的信息。

正确,filemtime() and stat() will follow symlinks, but lstat()不会。

This function is identical to the stat() function except that if the filename parameter is a symbolic link, the status of the symbolic link is returned, not the status of the file pointed to by the symbolic link.

例如:

<?php

function getSymlinkMtime($symlinkPath)
{
    $stat = lstat($symlinkPath);

    return isset($stat['mtime']) ? $stat['mtime'] : null;
}

可以用来代替filemtime()

在这种方法中,您的完整示例是:

<?php

$filename = '/var/www/html/files/myfile.rar';

if (file_exists($filename)) {
    echo "$filename was last modified: " . date ("F d Y H:i:s.", getSymlinkMtime($filename));
}