2010-05-26 5 views
0

조금 질문. 이 코드는 파일에 대해 완벽하게 작동하지만 디렉토리 이름에 대한 검색을 시도하면 결과가 비어 있습니다. 내가 어떻게 고칠 수 있니?Glob() 파일 검색, 질문

<?php 
function listdirs($dir,$search) 
{ 
    static $alldirs = array(); 
    $dirs = glob($dir."*"); 
    foreach ($dirs as $d){ 
     if(is_file($d)){ 
      $filename = pathinfo($d); 
      if(eregi($search,$filename['filename'])){ 
       print "<a href=http://someurl.com/" . $d .">". $d . "</a><br/>"; 
      } 
     }else{ 
      listdirs($d."/",$search); 
     } 
    } 
} 
$path = "somedir/"; 
$search= "test"; 
listdirs($path,$search); 
?> 

somedir/테스트/

결과 : 빈 (내가 원하는 :/somedir/테스트 /)

somedir/테스트/TEST.TXT

결과 : OK

디렉토리 이름에서도 검색하고 싶습니다. 어떻게 할 수 있습니까?

답변

0

디렉토리를 검색하려면 if(is_file($d)) 블록을 변경해야합니다. 지금은 디렉토리를 만날 때 listdirs을 다시 호출하면됩니다 ... 그러나 이것은 또한 해당 디렉토리에 대한 링크가있는 print을 결코 볼 수 없음을 의미합니다.

내가 대신 foreach이 같은 일을 제안 :

$filename = basename($d); 
    if(eregi($search,$filename)){ 
     print "<a href=http://someurl.com/" . $d .">". $d . "</a><br/>"; 
    } 
    if(is_dir($d)){ 
     listdirs($d."/",$search); 
    } 
+0

대단히 감사합니다! 너 나 많이 도와 줬어! – Peter

+0

또 다른 질문입니다.이 코드는 안전한가요? 사용자가 서버 파일을 나열 할 수 없습니까? 사용자가 얻는 것만 $ search 변수입니다. – Peter

+0

@Peter :'basename' 호출 때문에 안전해야합니다. 그러나, 나는 전에 그것을 시도한 적이 없으므로 특별히 인코딩 된 문자를 사용하여 그것을 벗어날 수 없다고 확실히 말할 수는 없다. – Powerlord

0

스크립트가 정상적으로 작동합니다. 웹 서버 사용자는 주어진 디렉토리에 대한 권한이 없다고 생각합니다.

+0

을하는 경우는 어떻게 이런 일이 가능 할까? 검색 "이" 하나/두/(디렉토리 구조) 결과 : 빈 (내가 원하는 :/한/두 /) 파일 "테스트"또는 "TEST.TXT"을 검색 하시나요 잘 작동한다. one/two/test.txt 결과 : OK (결과 : one/two/test.txt) 파일 검색은 작동하지만 괜찮습니까? 나는 그것이 전제 문제가 아니라고 생각한다. – Peter