递归地要求所有文件

时间:2015-12-07 11:20:35

标签: php recursion

我试图以递归方式添加项目中的所有文件,为此我使用了这个函数:

<?php

function RequireFiles()
{
    $directory = new RecursiveDirectoryIterator(abspath . "lib/");
    $recIterator = new RecursiveIteratorIterator($directory);

    foreach ($recIterator as $item)
    {
        print $item->getPathname() . "<br />";
        //include $item->getPathname();
    }
}

?>

取自here但稍作修改

我的问题是我的输出如下:

  

E:/项目/ PHP /项目/项目/ lib中
  E:/项目/ PHP /项目/工程/ lib中。
  E:/项目/ PHP /项目/工程/ lib目录\类
。   E:/项目/ PHP /项目/工程/ lib目录\类..
  E:/项目/ PHP /项目/工程/ lib目录\类\ Log.php
  E:/项目/ PHP /项目/工程/ lib目录\特质
。   E:/项目/ PHP /项目/工程/ lib目录\特质..
  E:/项目/ PHP /项目/工程/ lib目录\特征\ SetLink.php
  E:/项目/ PHP /项目/工程/ lib目录\特征\ MysqliEsp.php
  E:/项目/ PHP /项目/工程/ lib目录\阵列
。   E:/项目/ PHP /项目/工程/ lib目录\阵列..
  E:/ projects / php / project / project / lib \ arrays \ tables.php

我不希望最后有\.\..,并且暂时寻找答案,并且无法找到如何摆脱这些小恐怖!

有人可以帮助我解决这个问题,还是让我指向Q&amp; A的方向?

3 个答案:

答案 0 :(得分:2)

只需在构造函数中传递标记FilesystemIterator::SKIP_DOTS,例如

$directory = new RecursiveDirectoryIterator(abspath . "lib/"
                                            , FilesystemIterator::SKIP_DOTS);

答案 1 :(得分:1)

SplFileInfo (来自RecursiveIteratorIterator和RecursiveDirectoryIterator)有一个名为isFile()的方法。

您只需将if( !$item->isFile() ) continue;添加到您的foreach:

foreach ( $recIterator as $item ) {
    if( !$item->isFile() ) continue;
    print $item->getPathname() . "<br />";
    //include $item->getPathname();
}

答案 2 :(得分:1)

尝试检查名称($ key)并丢弃您不想要的内容:

foreach ($recIterator as $k=>$item)
{
    if ($k == '.' || $k == '..') { continue; }
    print $item->getPathname() . "<br />";
    //include $item->getPathname();
}