2014-11-02 84 views
0

我正在使用此代码来获取子目录的列表。获取指定路径的子目录到指定数量的子目录的列表

<?php 
$path = '/www/sites/'; 

$directory_iterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME); 

$iterator = new RecursiveIteratorIterator($directory_iterator, 
    RecursiveIteratorIterator::SELF_FIRST, 
    RecursiveIteratorIterator::CATCH_GET_CHILD); 

foreach ($iterator as $file => $info) { 
    if ($info->isDir()) { 
     echo $file . "\n"; 
    } 
} 
?> 

但它返回我这样

/www/sites/000/4e7 
/www/sites/000/4e7/. 
/www/sites/000/4e7/.. 
/www/sites/000/4e7/mydomains.com 
/www/sites/000/4e7/mydomains.com/. 
/www/sites/000/4e7/mydomains.com/.. 
/www/sites/000/4e7/mydomains.com/web 
/www/sites/000/4e7/mydomains.com/web/. 
/www/sites/000/4e7/mydomains.com/web/.. 
/www/sites/000/4e7/mydomains.com/web/cgi-bin 
/www/sites/000/4e7/mydomains.com/web/cgi-bin/. 
/www/sites/000/4e7/mydomains.com/web/cgi-bin/.. 
/www/sites/000/4e7/mydomains.com/web/Resources 
/www/sites/000/4e7/mydomains.com/web/Resources/. 

东西,我指定的根路径为/www/sites 我只需要在上面的输出

/www/sites/000/4e7/mydomains.com 

其余的都是对我没用。这意味着我只想从指定的路径上爬取3个子目录。我有成千上万的子目录,这就是为什么我想修改当前代码,因为它需要太多时间 先谢谢您。

回答

0

directoryiterator::isdot()使用,recursiveiteratoriterator::getdepth(),例如:

<?php 
$path = '/www/sites/'; 

$directory_iterator = new RecursiveDirectoryIterator($path,RecursiveDirectoryIterator::KEY_AS_PATHNAME); 

$iterator = new RecursiveIteratorIterator($directory_iterator,RecursiveIteratorIterator::SELF_FIRST,RecursiveIteratorIterator::CATCH_GET_CHILD); 

foreach ($iterator as $file => $info) { 
    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
    // Restrict to 3 levels only and ignore non-directory and dot files 
    if ($info->getDepth() >= 3 || !$info->isDir() || $info->isDot()) 
     continue; 
    // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

    echo $file . "\n"; 
} 

输出

/www/sites/000 
/www/sites/000/4e7 
/www/sites/000/4e7/mydomains.com 
+0

致命错误:在/www/sxxxxxxxxxxxxxxxxxxxxx.php调用未定义方法SplFileInfo :: getDepth()上线11 – 2014-11-02 17:08:47

+0

SplFileInfo ??? getDepth是RecursiveIteratorIterator的方法 – 2014-11-02 17:14:46

+0

我刚刚粘贴了你的代码并给了我这个错误,我在两台服务器和localhost上测试过,同样的错误在这两个地方:( – 2014-11-02 17:20:31

相关问题