2010-01-07 4 views
1

디렉토리의 파일 목록을 반복하고 있으며 파일 이름과 일치하는 하위 문자열을 일치시킵니다. 파일 이름에 하위 문자열이 포함되어 있으면 삭제할 수 있도록 해당 파일 이름을 반환하십시오. 나는 다음을하고 그저 모든 것을 돌려주었습니다 :디렉토리에서 하위 문자열과 일치하는 모든 파일과 파일 이름을 찾습니다.

while ($file = readdir($dir_handle)) { 

     $extension = strtolower(substr(strrchr($file, '.'), 1)); 
     if($extension == "sql" || $extension == "txt") { 

      $pos = strpos($file, $session_data['user_id']); 

      if($pos === true) { 
       //unlink($file); 
       echo "$file<br />"; 
      }else { 
       // string not found 
      } 
     } 
} 

내가 뭘 잘못하고 있니? 모든 도움

답변

4

strpos에 대한

덕분에 정수 또는 FALSE를 반환합니다. 당신이 링크 해제() 호출을 주석 처리를 제거 할 수있는 파일을 삭제하려면 - 당신은 당신의 테스트가 다음

$pos !== FALSE 

로 업데이트 할 수 있습니다. 내가 "삭제할 수있는 반품"이라는 것이 무슨 뜻인지 모르겠습니다.

+0

우수함, 그것을 할 SPL을 사용할 수 있습니다! 나는 그 조합을 시도하지 않았다! :피 – Abs

1

당신이 리눅스에있는 가정 당신은 GLOB_BRACE 옵션과 함께 [글로브()] [1] 기능을 사용하여이 작업을 수행 할 수 있습니다 또한 거기 USER_ID에 혼합 할 수

$files = glob('*.{sql,txt}', GLOB_BRACE); 

.

Windows에서 작동하는지 확실하지 않습니다. http://de.php.net/glob을 참조하고 GLOB_BRACE 옵션에 대한 참고 사항을 유의하십시오.

0
if ($handle = opendir('/path/to/dir/') { 
    $extensions = array('sql' => 1, 'txt' => 1); 
    while (false !== ($file = readdir($handle))) { 
     $ext = strtolower(substr(strrchr($file, '.'), 1)); 
     if (isset($extensions[$ext]) && strpos($file, $session_data['user_id']) !== false) 
      echo "$file<br />"; 
     else 
      echo "no match<br />"; 
     } 
    } 
} 
0

재귀

foreach (new DirectoryIterator('/path') as $file) { 
    if($file->isDot()) continue; 
    $filename = $file->getFilename(); 
    $pathname = $file->getPathname(); 
    if (strpos ($filename ,".sql") !==FALSE) { 
     echo "Found $pathname\n"; 
     $pos = strpos($filename, $session_data['user_id']); 
     ...... 
     #unlink($pathname); #remove your file 
    } 
} 
관련 문제