【发布时间】:2011-05-23 00:39:00
【问题描述】:
我正在读取一个包含大量文件的文件夹。
如何获取文件的创建日期。我没有看到任何直接获取它的功能。
有filemtime和filectime。
如果文件没有被修改,会发生什么?
【问题讨论】:
我正在读取一个包含大量文件的文件夹。
如何获取文件的创建日期。我没有看到任何直接获取它的功能。
有filemtime和filectime。
如果文件没有被修改,会发生什么?
【问题讨论】:
使用filectime。对于 Windows,它将返回 creation 时间,而对于 Unix,change 时间是您可以获得的最佳时间,因为在 Unix 上没有创建时间(在大多数文件系统中)。
还要注意,在某些 Unix 文本中 文件的 ctime 称为 是文件的创建时间。 这是错误的。没有创造 大多数 Unix 中 Unix 文件的时间 文件系统。
【讨论】:
filemtime for Linux 更好、更精确,因为filectime 在所有者、权限更改等操作期间更改。使用filemtime,您将有更多机会在 Linux 上获得创建时间
这是从此处的 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()返回修改时间。
很遗憾,如果您在 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);
}
}
【讨论】: