2012-10-08 40 views
3

我試圖使用RecursiveDirectoryIterator和RecursiveIteratorIterator在PHP中重新列出目錄,但事實是,我需要忽略一些目錄和文件..在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 . '<br />'; 
} 

我已經嘗試了不同的方法來檢查,如果目錄/文件是在陣列中,但也不能正常工作,或者目錄沒有忽視完全...

這是一個例子的d irectory結構

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?

謝謝!

回答

3

你應該總是使用Full Path因爲你是合併文件和文件夾

$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 . '<br />'; 
} 
+0

謝謝,但對於目錄,他們仍然顯示出來.. –