我正在阅读包含大量文件的文件夹。
如何获取文件的创建日期。我没有看到任何直接的功能来获得它。
有filemtime
和filectime
。
如果文件未被修改,会发生什么?
答案 0 :(得分:94)
使用filectime。对于Windows,它将返回创建时间,而对于Unix,更改时间是最好的,因为在Unix上没有创建时间(在大多数文件系统中)。
另请注意,在某些Unix文本中 文件的ctime称为 是文件的创建时间。 这是错的。没有创造 在大多数Unix中Unix文件的时间 文件系统。
答案 1 :(得分:7)
不幸的是,如果您在Linux上运行,则无法访问该信息,因为只存储了上次修改日期。
它稍微取决于你的文件系统。我知道ext2和ext3不支持创建时间,但我认为ext4可以。
答案 2 :(得分:5)
$filename = 'somefile.txt';
if (file_exists($filename)) {
echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
答案 3 :(得分:1)
Mac OS X有一个解决方案,它支持在其文件系统中创建日期:How do I get actual creation time for a file in PHP on a Mac?
答案 4 :(得分:-2)
我知道这个主题已经超级老了,但是,如果有人正在寻找答案,就像我一样,我正在发布我的解决方案。
如果你不介意在文件的开头有一些额外的数据,这个解决方案就可以了。
基本上,想法是,如果文件不存在,则创建它并在第一行追加当前日期。
接下来,您可以使用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);
}
}