2016-09-06 3 views
0

파일의 하위 이름이있는 폴더에서 파일을 찾는 방법은 검색 할 파일의 이름이 완전히 지정되지 않았지만 이름의 일부인 경우 (예 : 'hello_world_123.png') 파일을 검색하려고합니다. 나는 파일의 전체 이름을 입력하지 않았지만 하나 또는 일부 단어 만, 예를 들어 'world_'는 입력이지만 코드는 파일의 전체 이름을 검색해야합니다.PHP를 사용하여 폴더에서 재귀 적으로 파일을 찾는 방법은 무엇입니까?

즉, 검색은 파일 탐색기 또는 파일 관리자에서 운영 체제 검색과 유사하게 작동합니다.

내 코드는 아래와 같지만 if 조건의 파일 이름과 일치해야합니다.

$file_name_ = 'recursive-1.php'; 
$dir = new RecursiveDirectoryIterator($folder_path, RecursiveDirectoryIterator::SKIP_DOTS); 
$it = new RecursiveIteratorIterator($dir); 

foreach($it as $file) {  

    $file_info = pathinfo($file);  

    $patt = '/^(\w+)\.+('.$file_name_.')\.+(\w+)*$/'; 
    $result = preg_match($patt,strtolower($file_info['basename']),$match);  
    if ($result) {  
     echo 'File found'; 
    } else { 
     echo 'File not found'; 
    } 
} 
+3

문제 2 :'recusive-1.php'는'find-recursive-1-file.php'의 부분 문자열이 아닙니다. 파일 이름과 "일치하는"규칙을 더 잘 설명해야합니다. –

+0

'recursive-1.php'@CasimiretHippolyte – SCC

+1

\ w에 대시 문자가 포함되어 있지 않습니다. 그리고 존재 여부 만 확인하려면 strpos 함수를 사용하십시오. –

답변

-2

여기에는 preg_match()을 사용해야합니다. 폴더에있는 파일의 일부 또는 검색중인 파일의 전체 이름을 볼 수 있습니다.

+0

누가 내 질문에 답을했는지, 그 문제의 해결책은 preg_match를 사용하여 원하는 내용이 포함 된 텍스트를 찾는 것입니다. 내 대답에 무슨 문제가 있습니까? – J3Rik0

+0

preg_match는 이미 질문에서 사용되며 문제 만 해결하지는 않습니다. – Tonin

+0

@Tonin 그가 preg_match()를 사용하지 않는 질문에 대답했을 때, 완전한 대답이 아니었지만 출발점이었습니다. 그리고 그것을 확장 할 수있었습니다. 개인적으로 나는 뛰어 오르고 생각하지 않습니다. 의견에 마이너스가 올바른 방법이지만, 헤이, 누가 판사 야, btw, 투표를하기 전에 질문의 수정 사항을 확인 했습니까? – J3Rik0

0

확장명의 유무에 관계없이 재귀 적으로 파일을 찾으려면 다음 코드가 유용합니다. 파일 이름이 완전한 이름 (파일 이름의 일부분)이 아니므로 strpos() 함수가 부분 파일 이름의 위치를 ​​찾습니다.

$file_name_ = 'recursive-1.php'; 

//Splitting the file to get the file name without extension 
$file_name_ = explode('.',$file_name_); 
$file_name_ = $file_name_[0]; 

$dir = new RecursiveDirectoryIterator($folder_path, RecursiveDirectoryIterator::SKIP_DOTS); 
$it = new RecursiveIteratorIterator($dir); 

//looping for all files in given directory 
foreach($it as $file) {  

    $file_info = pathinfo($file);  
    //$patt = '/^(\w+)\.+('.$file_name_.')\.+(\w+)*$/'; 
    //$result = preg_match($patt,strtolower($file_info['basename']),$match);  
    //$result = strpos(strtolower($file_info['filename']),strtolower($file_name_));  
    $result = stripos($file_info['filename'], $file_name_); 
    if ($result === flase) {  
     echo 'File not found'; 
    } else { 
     echo 'File found'; 
    } 
} 
관련 문제