2010-01-07 6 views
4

디렉토리의 캐시 파일을 삭제하려면 디렉토리에 최대 50.000 개의 파일을 포함 할 수 있습니다. 나는 현재이 기능을 사용하고 있습니다.PHP 디렉토리에서 파일 검색 및 삭제 - 성능

// Deletes all files in $type directory that start with $start 

    function clearCache($type,$start) 
     { 
     $open = opendir($GLOBALS['DOC_ROOT']."/cache/".$type."/"); 
     while(($file = readdir($open)) !== false) 
      { 
      if (strpos($file, $start)!==false) 
       { 
       unlink($GLOBALS['DOC_ROOT']."/cache/".$type."/".$file); 
       } 
      } 
     closedir($open);   
     } 

이 방법은 정상적으로 작동하며 빠르지 만 빠른 방법이 있습니까? (scan_dir이 느린 것 같습니다). 캐시를 메모리로 옮길 수 있습니다.

감사합니다, 마을

답변

4

당신은 ... 그것은 더 빨리 할 수 ​​같이 glob 기능으로 살펴 봐야 할 수 있습니다이 작업을 수행하는 C 라이브러리의 글로브 명령에 따라 달라집니다.

나는이 테스트를하지 않은,하지만 난이 일 것 ::

foreach (glob($GLOBALS['DOC_ROOT']."/cache/".$type."/".$start) as $file) { 
    unlink($GLOBALS['DOC_ROOT']."/cache/".$type."/".$file); 
} 

편집을 생각한다 : $ 파일 그냥 파일 이름이나 전체 경로가 될 것입니다 있는지 확실하지 않습니다. glob의 문서는 파일 이름만을 의미합니다.

+0

첫 번째 테스트에서 두 배 이상 빠릅니다. 고마워요! – hamlet

+0

나는 당신의 솔루션을 사용하지 않았지만'glob' 함수는'RecursiveDirectoryIterator'를 사용하는 또 다른 해결책으로 이끌었습니다. 고맙습니다. – dchayka

0

앞에서 제안한대로 glob이거나, exec(sprintf('rm %s/sess*', realpath($path)));을 통해 시스템에 직접 발급하면 악의적 인 입력이 없음을 확신 할 수 있다면 가장 빠릅니다.