2012-10-08 3 views
3

PHP에서 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 . '<br />'; 
} 

나는 디렉토리/파일이 배열에 있는지 확인하기 위해 여러 가지 방법을 시도했지만, 또는 작동하지 않거나 디렉토리는 무시되지 않는다 completly ...

이 예제의 d 디렉토리 구조

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

당신이

$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

감사 파일 및 폴더를 결합하고 있기 때문에 당신은 항상 Full Path를 사용해야하지만, 디렉토리에 그들은 여전히 ​​보여주고있다 .. –

관련 문제