我正在读取一个有很多文件的文件夹。
如何获取一个文件的创建日期。我没有看到任何直接获取它的函数。
有filemtime
和filectime
。
如果文件没有被修改,会发生什么?
使用filectime函数。在Windows系统中,该函数将返回文件的创建时间,在Unix系统中,该函数将返回修改时间,这是最好的结果,因为在大多数Unix文件系统中没有创建时间。
还要注意,在一些Unix文本中,文件的ctime被称为该文件的创建时间。这是错误的,在大多数Unix文件系统中,文件没有创建时间。
以下是来自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个参数,即文件的路径,这可以是相对路径或绝对路径。
filemtime()
函数返回文件的修改时间。 - Stefan很遗憾,如果你在Linux上运行,则无法访问信息,因为只存储了最后修改日期。
不过这略有所不同取决于文件系统。我知道ext2和ext3不支持创建时间,但我认为ext4是支持的。
我知道这个话题已经很老了,但是,如果有人像我一样在寻找答案,我会发布我的解决方案。
如果您不介意在文件开头有一些额外的数据,那么这个解决方案就可以使用。
基本上,思路是,如果文件不存在,则创建它并在第一行附加当前日期。
接下来,您可以使用 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);
}
}
filemtime
比filectime
更好、更精确,因为在文件所有者、权限等发生变化时,filectime
也会被改变。使用filemtime
可以更容易地获取Linux上的文件创建时间。 - Fedir RYKHTIKclearstatcache()
来清除PHP元数据缓存。 - M Rostami