使用PHP RecursiveTreeIterator构建日志读取器

时间:2012-02-27 22:41:44

标签: php oop iterator directory-structure spl

我有这个日志的目录结构

logs
-2012
--01
---01.php
---02.php
--02
---20.php
---23.php

我希望能够使用PHP的RecursiveTreeIterator来显示具有实际php文件(而不是dirs)的树作为显示文件内容的链接。

使用此问题的第一个答案作为指南:Sorting files per directory using SPL's DirectoryTreeIterator

我是大多数PHP 5的SPL的新手,所以我需要一些帮助。我如何建树?谢谢!

1 个答案:

答案 0 :(得分:4)

作为我在评论中提供的链接的替代方案:

您还可以扩展TreeIterator的current()方法以提供额外的标记:

class LinkedRecursiveTreeIterator extends RecursiveTreeIterator
{
    public function current()
    {
        return str_replace(
            $this->getInnerIterator()->current(),
            sprintf(
                '<a href="%1$s">%1$s</a>',
                $this->getInnerIterator()->current()
            ),
            parent::current()
        );
    }
}

$treeIterator = new LinkedRecursiveTreeIterator(
    new RecursiveDirectoryIterator('/path/to/dir'),
    LinkedRecursiveTreeIterator::LEAVES_ONLY);

foreach($treeIterator as $val) echo $val, PHP_EOL;

以上将打印TreeIterator打印的常规ASCII树,但会将文件名包装成超链接。请注意$this->getInnerIterator()->current()返回File对象,因此您也可以访问任何其他文件属性,例如filesize,last modified等。