加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP递归列出所有带日期的文件

发布时间:2020-12-13 16:57:38 所属栏目:PHP教程 来源:网络整理
导读:在有人标记此副本之前,请理解我搜索了此网站,Google搜索和 PHP.net. 我想要的是超级简单.我想要一个带有日期戳(最后修改)的网站上所有文件的列表.我发现有几个声称可以执行此操作的脚本,但它们都没有工作. 到目前为止我发现的最好的是这一个: header("Pragm
在有人标记此副本之前,请理解我搜索了此网站,Google搜索和 PHP.net.

我想要的是超级简单.我想要一个带有日期戳(最后修改)的网站上所有文件的列表.我发现有几个声称可以执行此操作的脚本,但它们都没有工作.

到目前为止我发现的最好的是这一个:

header("Pragma: public");
  header("Cache-Control: private");
  header("Content-Type: text/csv");
  header("Content-Disposition: attachment; filename=age-of-files.csv");

  $result = array();
  $handle =  opendir(".");
     while ($datei = readdir($handle))
     {
          if (($datei != '.') && ($datei != '..'))
          {
               $file = "./".$datei;
               if (!is_dir($file))
                    $result[] = $file;
          }
     }
     closedir($handle);
  foreach($result as $r)
    if (file_exists($r))
      echo substr($r,2).",".date ("m-d-Y",filemtime($r))."rn";

这适用于脚本运行的dircetory,但它不是递归的.我需要它继续为每个子目录.我的目标是有一个可排序的列表,以便我可以找到在某些日期或周围修改过的文件.

我是PHP的新手,所以请耐心等待.我在PHP.net做了一些研究(我一直看到人们提到SPL,我不确定它代表什么或它是什么,但也许它是一组标准的PHP类?),看起来我需要以某种方式使用RecursiveDirectoryIterator.

我发现这个脚本在纸上看起来很棒,但在我的网站上运行会给出一个空白的白色屏幕.

try
{
        /*** freds home directory ***/
        $rdi = new recursiveDirectoryIterator('/',FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS);
        $it = new recursiveIteratorIterator( $rdi );
        while( $it->valid())
        {
                if( !$it->isDir() )
                {
                        echo $it->current().' '.date('Y m d H:i:s',$it->getATime() )."n";
                }

                /*** move to the next element ***/
                $it->next();
        }
}
catch(Exception $e)
{
        /*** echo the error message ***/
        echo $e->getMessage();
}

我更喜欢使用第一个脚本,因为它创建了一个csv文件(易于排序),但我不确定如何调和这两个.有人可以告诉我如何将RDI合并到第一个脚本中吗?

解决方法

这是一个我发现工作得非常好的小代码

$rdi = new RecursiveDirectoryIterator("path/"); // The directory here
$rii = new RecursiveIteratorIterator($rdi);

foreach ($rii as $filename=>$cur) {
    echo $cur.' '.date('Y m d H:i:s',$cur->getATime() )."<br/>";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读