我试图以递归方式添加项目中的所有文件,为此我使用了这个函数:
<?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的方向?
答案 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();
}