如何在php中的目录中获取最新文件

Mik*_*ike 25 php directory

所以我有这个处理CSV文件的应用程序.我有一行代码来加载文件.

$myFile = "data/FrontlineSMS_Message_Export_20120721.csv";  //The name of the CSV file
$fh = fopen($myFile, 'r');                             //Open the file
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法,我可以在data目录中查看并获取最新的文件(它们都有日期标记,因此它们将按顺序排列data)并将名称设置为等于$myFile.

我真的找不到并理解php目录的文档,所以任何有用的资源也会受到赞赏.谢谢.

Mat*_*chu 47

这是一次尝试使用scandir,假设目录中的唯一文件是您想要的带时间戳的文件:

$files = scandir('data', SCANDIR_SORT_DESCENDING);
$newest_file = $files[0];
Run Code Online (Sandbox Code Playgroud)

我们首先按降序列出目录中的所有文件,然后,该列表中的第一个文件具有"最大"文件名 - 因此是最大的时间戳值 - 因此是最新的.

请注意,它scandir是在PHP 5中添加的,但其文档页面显示了如何在PHP 4中实现该行为.

  • 如果我错了,请纠正我,但scandir按照alfabetical顺序排序节点名称,而不是时间戳值顺序. (13认同)
  • 重要提示:如上所述,这是alpha排序,而不是实际的时间戳排序.因此,如果日期戳记反映在文件名中,它将正常工作,否则它将不会给出预期的结果. (5认同)
  • 常量SCANDIR_SORT_DESCENDING和SCANDIR_SORT_ASCENDING已经从PHP 5.4开始定义 - 在5.4之前的PHP 5版本中,您必须分别使用1和0来定义排序顺序. (4认同)
  • @mike:那是对的!OP的文件在名称中有时间戳,因此按名称排序就足够了.不确定如何通过实际修改日期来做到这一点...... (3认同)
  • @Mike:太酷了:)我现在离启用PHP的盒子还很远,因此这个示例虽然只有两行,但尚未经过测试,所以请告诉我它是否不能正常工作。 (2认同)

Max*_*ann 7

对于使用通配符的搜索,您可以使用:

<?php
$path = "/var/www/html/*";

$latest_ctime = 0;
$latest_filename = '';

$files = glob($path);
foreach($files as $file)
{
        if (is_file($file) && filectime($file) > $latest_ctime)
        {
                $latest_ctime = filectime($file);
                $latest_filename = $file;
        }
}
return $latest_filename;
?>
Run Code Online (Sandbox Code Playgroud)