我试图使用RecursiveDirectoryIterator和RecursiveIteratorIterator在PHP中以递归方式列出目录,但事实是,我需要忽略其中的某些目录和文件.
这是我到目前为止所拥有的..
// Define here the directory you have platform installed.
//
$path = 'testing';
// List of directories / files to be ignored.
//
$ignore_new = array(
# Directories
#
'.git',
'testing/dir1',
'testing/dir2',
'testing/dir3',
'testing/dir8',
'public',
# Files
#
'.gitignore',
'.gitmodules',
'.CHANGELOG.md',
'.README.md',
);
$ite = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
foreach (new RecursiveIteratorIterator($ite) as $filename => $object)
{
echo $filename . '
';
}
我尝试了不同的方法来检查目录/文件是否在数组中,但是还是行不通,或者目录没有被完全忽略…
这是目录结构的一个例子
testing\
testing\.git
testing\.git\files & directories
testing\testing\dir1
testing\testing\dir2
testing\testing\dir3
testing\testing\dir8
testing\.gitignore
testing\.gitmodules
testing\CHANGELOG.md
testing\README.md
这是否可能,或者我需要使用旧的方式来递归地用PHP列出目录/文件?
谢谢 !
解决方法:
由于要合并文件和文件夹,因此应始终使用完整路径
$path = __DIR__;
// List of directories / files to be ignored.
//
$ignoreDir = array('1.MOV.xml','.git','testing/dir1','testing/dir2','testing/dir3','testing/dir8','public');
/**
* Quick patch to add full path to Ignore
*/
$ignoreDir = array_map(function ($var) use($path) {
return $path . DIRECTORY_SEPARATOR . $var;
}, $ignoreDir);
$ite = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
foreach ( new RecursiveIteratorIterator($ite) as $filename => $object ) {
if (in_array($filename, $ignoreDir))
continue;
echo $filename . '
';
}
标签:php,recursion
来源: https://codeday.me/bug/20191127/2074960.html