【问题标题】:PHP: how can I get file creation date?PHP:如何获取文件创建日期?
【发布时间】:2011-05-23 00:39:00
【问题描述】:

我正在读取一个包含大量文件的文件夹。

如何获取文件的创建日期。我没有看到任何直接获取它的功能。

filemtimefilectime

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

【问题讨论】:

    标签: php file


    【解决方案1】:

    使用filectime。对于 Windows,它将返回 creation 时间,而对于 Unix,change 时间是您可以获得的最佳时间,因为在 Unix 上没有创建时间(在大多数文件系统中)。

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

    【讨论】:

    • 返回文件上次更改的时间,失败时返回 FALSE。时间作为 Unix 时间戳返回。
    • @zod 如果您阅读的内容比第一行多一点,您可能会了解更多。也进入 cmets。
    • 那不是创建日期。这就是我所说的:-)
    • filemtime for Linux 更好、更精确,因为filectime 在所有者、权限更改等操作期间更改。使用filemtime,您将有更多机会在 Linux 上获得创建时间
    • 运行这个 php 函数或提取 MySQL 字段以进行最后更新会更快吗?在我的情况下,图像路径存储在数据库中并且已经在运行选择查询
    【解决方案2】:

    这是从此处的 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 个参数,即文件的路径,可以是相对的,也可以是绝对的。

    【讨论】:

    • Rakesh 请解释你的代码,不要只是发布一些代码并期望人们理解它。
    • 虽然这篇仅包含代码的帖子可能会回答这个问题,但请添加解释原因。这将有助于未来的读者根据他们的情况评估答案。
    • 函数filemtime()返回修改时间。
    • Michael,由于 filemtime() 函数的含义不明显,代码值得一些注释。
    • 代码指定文件名,然后检查它是否存在,然后使用filemtime()显示修改时间。 filemtime() 接受 1 个参数,即文件的路径,可以是相对的或绝对的。上面的示例是从此处的 PHP 文档中复制的 php.net/manual/en/function.filemtime.php
    【解决方案3】:

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

    它确实稍微取决于您的文件系统。我知道 ext2 和 ext3 不支持创建时间,但我认为 ext4 支持。

    【讨论】:

      【解决方案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);
                  }
              }
      

      【讨论】:

      • 为什么需要修改甚至删除文件才能获取日期?这听起来不像是原始问题的解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2023-03-23
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多