在文件夹及其子文件夹中查找当前日期创建的文件

3

我正在尝试查找今天创建的文件。我在其他帖子中找到了大部分答案,但无法完全正确。下面的代码将回显所有文件,而不仅仅是今天创建的文件。有什么建议吗?谢谢。

$di = new RecursiveDirectoryIterator('/documents/listings');
foreach (new RecursiveIteratorIterator($di) as $filename => $file) 
{

    if (date ("m-d-Y", filemtime($file)) == date("m-d-Y")) 

    { echo $filename . '<br/>'; }

}

适用于我。打印出今天创建的所有文件和所有时间创建的目录。 - testo
抱歉,我现在才看到。深入查看输出,发现今天创建了两个文件。目录中有数百个文件,我假设当它显示所有文件夹名称时,它没有按日期进行过滤。我该如何获取找到匹配文件的文件夹名称? 谢谢! - WGS
我的最终目标是使用上述脚本每天检查服务器上上传了哪些新文件。然后使用以下命令将匹配的文件夹和文件上传到S3存储桶中: $client->uploadDirectory($filename, 'my_bucket');但是,我不需要文件名,只需要匹配文件所在的路径/文件夹名称。例如... $filename 输出: ../deals/upload/documents/lists/0000Main_Street15/a_file.pdf但我只需要: ../deals/upload/documents/lists/0000Main_Street15/如何获取路径而不包括文件名?谢谢。 - WGS
@user2413654 使用 dirname($filepath); 它会给你父文件夹的路径。 - Manoj Dhiman
注意:大多数类UNIX文件系统不记录文件的创建时间。 - cn007b
显示剩余3条评论
3个回答

4
首先,关于函数filemtime,它返回文件最后修改时间。
但是还存在函数filectime,它返回文件的inode更改时间。
我发现filectime更适合您的问题,但它确实返回不仅是今天创建的文件,还包括今天编辑过的文件。
我的代码:
<?php

$path = dirname(__FILE__);

$objects = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($objects as $file => $object) {
    $basename = basename($file);
    if ($basename == '.' or $basename == '..') {
        continue;
    }
    if (is_dir($file)) {
        continue;
    }
    if (date('Y-m-d') === date('Y-m-d', filectime($file))) {
        echo $file . PHP_EOL;
    }
}

到目前为止,这种方法是实现我所需的最佳方式。它只输出文件。然后我运行:$client->uploadDirectory($file, 'my.bucket');运行后,我注意到最好检查目录修改时间而不是文件,以防有多个与当前日期匹配的文件,否则每次找到文件日期匹配时就会上传整个目录。如何检查目录修改日期呢? - WGS

1
你的代码对我有效。请检查文件创建日期,或尝试更改过去创建的目录。

-1
if (!is_dir($file) && date ("m-d-Y", filemtime($file)) == date("m-d-Y")) 

也许你只想显示文件而不包括目录?尝试使用以下条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接