PHP:如何获取文件创建日期?

98

我正在读取一个有很多文件的文件夹。

如何获取一个文件的创建日期。我没有看到任何直接获取它的函数。

filemtimefilectime

如果文件没有被修改,会发生什么?

4个回答

132

使用filectime函数。在Windows系统中,该函数将返回文件的创建时间,在Unix系统中,该函数将返回修改时间,这是最好的结果,因为在大多数Unix文件系统中没有创建时间。

还要注意,在一些Unix文本中,文件的ctime被称为该文件的创建时间。这是错误的,在大多数Unix文件系统中,文件没有创建时间。


返回文件上次更改的时间戳,如果失败则返回FALSE。时间戳以Unix格式返回。 - zod
1
@zod 如果你读得比第一行多一点,你可能会更理解。也可以看一下评论。 - Alin Purcaru
1
那不是创建日期。这就是我说的 :-) - zod
11
在Linux操作系统中,filemtimefilectime更好、更精确,因为在文件所有者、权限等发生变化时,filectime也会被改变。使用filemtime可以更容易地获取Linux上的文件创建时间。 - Fedir RYKHTIK
运行这个PHP函数还是从MySQL字段中提取最后更新的信息会更快?在我的情况下,图像路径存储在数据库中,并且已经运行了一个选择查询。 - drooh
在使用filemtime之前,考虑调用clearstatcache()来清除PHP元数据缓存。 - M Rostami

31

以下是来自PHP官方文档的示例代码:https://www.php.net/manual/en/function.filemtime.php

// outputs e.g.  somefile.txt was last changed: December 29 2002 22:16:23.

$filename = 'somefile.txt';

if (file_exists($filename)) {

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

该代码指定了文件名,然后检查文件是否存在,并使用filemtime()显示修改时间。

filemtime()需要1个参数,即文件的路径,这可以是相对路径或绝对路径。


4
Rakesh,请解释一下你的代码,不要只是发布一些代码并期望别人能够理解它。 - Persijn
2
虽然这篇仅包含代码的帖子可能回答了问题,但请添加一个解释为什么它能够这样做。这将有助于未来的读者评估答案是否适用于他们的情况。 - Tom Brunberg
3
filemtime()函数返回文件的修改时间。 - Stefan
迈克尔,由于filemtime()函数的含义不明显,代码应该加上一些注释。 - Radium
代码指定了文件名,然后检查其是否存在,并使用filemtime()显示修改时间。filemtime()需要1个参数,即文件的路径,可以是相对路径或绝对路径。上面的示例摘自PHP文档,链接在此处:https://www.php.net/manual/en/function.filemtime.php。 - Harvey Dobson

10

很遗憾,如果你在Linux上运行,则无法访问信息,因为只存储了最后修改日期。

不过这略有所不同取决于文件系统。我知道ext2和ext3不支持创建时间,但我认为ext4是支持的。


1
是的,ext4文件系统有这个功能,但访问并不容易。请参考https://tecadmin.net/file-creation-time-linux/。 - 8ctopus

-4

我知道这个话题已经很老了,但是,如果有人像我一样在寻找答案,我会发布我的解决方案。

如果您不介意在文件开头有一些额外的数据,那么这个解决方案就可以使用。

基本上,思路是,如果文件不存在,则创建它并在第一行附加当前日期。 接下来,您可以使用 fgets(fopen($file, 'r')) 读取第一行,将其转换为 DateTime 对象或任何其他格式(除非您以奇怪的格式保存它,否则您可以直接使用它),然后您就有了创建日期!例如,我的脚本每30天刷新一次日志文件,代码如下:

if (file_exists($logfile)) {
    $now = new DateTime();
    $date_created = fgets(fopen($logfile, 'r'));

    if ($date_created == '') {
        file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
    }

    $date_created = new DateTime($date_created);
    $expiry = $date_created->modify('+ 30 days');
    
    if ($now >= $expiry) {
        unlink($logfile);
    }
}

8
为什么你需要修改甚至删除一个文件才能获取日期?这似乎并不是解决原始问题的方案。 - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接