2009-12-26 3 views
2

PHP에서 여러 디렉토리를 통해 파일을 검색하는 "성능"방법이 있습니까?함수를 여러 디렉토리를 통해 파일을 찾는 방법은?

$ pathOne, $ pathTwo, $ pathThree :

내가 파일 검색 경로 중 하나가 될 수 있음을 알고 말할 수 있습니다. 그러나 이제는 상상할 수 있습니다. 사용자 (프레임 워크를 사용하는 개발자)는 하위 폴더에서도 항목을 그룹화 할 수 있습니다. $ pathTwo에는 20 개의 하위 폴더가 있고 각 하위 폴더에는 하위 폴더가 2 개 더 있습니다.

어떻게 이러한 모든 경로와 $ 파일의 하위 폴더를 검색 할 수 있습니까? 필자는 file_exists() 함수를 과도하게 사용하여 하위 프레임을 검색하지 않고 프레임 워크를 보았습니다. 아마도 폴더가 있는지 파악한 다음 그 폴더로 들어갈 수있는 방법이 필요하겠습니까?

답변

4

당신은 SPL 라이브러리에서 RecursiveDirectoryIterator을 사용할 수

$dir_iterator = new RecursiveDirectoryIterator("/path"); 
$iterator = new RecursiveIteratorIterator($dir_iterator, 
        RecursiveIteratorIterator::SELF_FIRST); 

foreach ($iterator as $file) { 
    echo $file, "\n"; 
} 

위의 코드는 모든 하위 디렉토리를 포함하여 사용자가 지정한 디렉토리에있는 모든 파일의 목록을 인쇄합니다. 이처럼, 당신이 찾고있는 파일을 찾기 위해 파일 매칭 로직을 수행하기 위해 약간 foreach() 루프를 변경할 수 :

$dir_iterator = new RecursiveDirectoryIterator("/path"); 
$iterator = new RecursiveIteratorIterator($dir_iterator, 
        RecursiveIteratorIterator::SELF_FIRST); 

foreach ($iterator as $splFile) { 
    if ($splFile->getBaseName() == $file) { 
     echo "Found it"; 
     //do stuff 
     break; 
    } 
} 

모든 파일과 디렉토리 자신을 파악하는 데 많은 작업을 저장합니다.

+1

디렉토리를 원하지 않을 때 SELF_FIRST을 생략 할 수 있으며 파일 이름을 FilterIterator로 확인할 수도 있습니다. – Gordon

+0

제발, 당신은 예를 들어 줄 수 있습니까? 그런 식으로 일할 수는 없습니다. – openfrog

+0

@openfrog - 두 번째 코드 블록은 완전한 작동 예제이며, 첫 번째 줄의 "/ path"를 변경하면 잘 작동합니다. 어떤 종류의 문제가 있습니까? – zombat

관련 문제