【问题标题】:File creation time [closed]文件创建时间[关闭]
【发布时间】:2011-01-06 07:10:36
【问题描述】:

如何按文件创建对目录进行排序,最新的 PHP 5.2 优先?

我使用的是 Windows 2000。

【问题讨论】:

    标签: php file time sorting


    【解决方案1】:

    在 windows 上,CTime 是创建时间,使用如下:

    <?php
    $files = array();
    
    foreach (new DirectoryIterator('/path') as $fileInfo) {    
        $files[$fileInfo->getFileName()] = $fileInfo->getCTime();
    }
    
    arsort($files);
    

    在此之后,$files 将包含一个文件名数组作为键,ctime 作为值。我选择这种反向表示是因为可能存在相同的 ctime,这会导致 $files 中的条目被覆盖。

    编辑:

    更新了使用 CTime 的答案,因为 OP 澄清他正在使用 Windows。

    【讨论】:

    • 这是修改时间而不是创建时间
    • 对。你读过我的第一行吗?大多数文件系统不跟踪创建时间。
    • 不,这行不通。 rsort 将丢失文件名。
    • @stcony0:我更新了我的答案以使用 Windows。请注意,它不适用于 *nix。
    • +1 用于使用 Spl - 尽管迭代器也不知道这么快 ;)
    【解决方案2】:

    大多数操作系统不存在文件创建时间。

    【讨论】:

    • 不适用于 windows。
    【解决方案3】:

    您不能在 Unix 系统上指定创建日期,但要更改日期,请参阅下面的 Windows 编辑。

    代码如下:

    function sortByChangeTime($file1, $file2)
    {
        return (filectime($file1) < filectime($file2)); 
    }
    $files = glob('*');                // get all files in folder
    usort($files, 'sortByChangeTime'); // sort by callback
    var_dump($files);                  // dump sorted file list
    

    来自filectime 上的 PHP 手册注释:

    注意:另请注意,在某些 Unix 文本文件的 ctime 被引用 作为创建时间 文件。这是错误的。没有 大多数 Unix 文件的创建时间 Unix 文件系统。

    请参阅link in Antti's answers 了解 ctime、atime 和 mtime 的差异,并确定最适合您在 Unix 上使用的用例。

    编辑filectime 页面上的一个 cmets 指出 在 Windows 上没有更改时间,并且 filectime 确实返回了创建时间。我不是 Windows 文件系统的专家,但使用上面的可能是你最好的选择。或者,您可以查看 COM API 以获取 ScriptingHost 的句柄,看看是否可以从那里获取创建时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 2016-05-25
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多