我正在阅读包含大量文件的文件夹。
如何获取文件的创建日期。我看不到任何直接功能来获取它。
有filemtime
和filectime
。
如果文件没有被修改,会发生什么?
Answers:
使用filectime。对于Windows,它将返回创建时间,而对于Unix,将返回最佳更改时间,因为在Unix上,没有创建时间(在大多数文件系统中)。
还要注意,在某些Unix文本中,文件的ctime称为文件的创建时间。错了 在大多数Unix文件系统中,没有为Unix文件创建时间。
filemtime
对于Linux来说,更好,更精确,因为filectime
在所有者,许可权更改以及其他操作期间会进行更改。您将有更多机会使用filemtime
这是从以下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()
返回修改时间。
我知道这个话题太老了,但是,如果有人像我一样正在寻找答案,我会发布我的解决方案。
如果您不介意在文件开头添加一些额外数据,则此解决方案有效。
基本上,想法是如果文件不存在,则创建该文件并将当前日期附加在第一行。接下来,您可以使用读取第一行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);
}
}