>  기사  >  백엔드 개발  >  공유: PHP에서 파일을 탐색하는 4가지 방법

공유: PHP에서 파일을 탐색하는 4가지 방법

WBOY
WBOY원래의
2016-07-25 08:57:37832검색
  1. /**

  2. * 현재 디렉터리와 하위 디렉터리의 모든 파일 가져오기
  3. * @param string $dir 경로 이름
  4. * @return array 모든 파일의 경로 배열
  5. */
  6. function get_files1($dir) {
  7. $files = array();

  8. if(!is_dir($dir)) {

  9. return $files;
  10. }

  11. < p>$handle = opendir($dir);
  12. if($handle) {
  13. while(false !== ($file = readdir($handle))) {
  14. if ($file != '.' && $file != '..') {
  15. $filename = $dir . "/" . $file;
  16. if(is_file($filename)) {
  17. $files[] = $filename;
  18. }else {
  19. $files = array_merge($files, get_files($filename));
  20. }
  21. }
  22. } // 종료 동안
  23. closedir($handle );
  24. }
  25. return $files;
  26. } // 함수 종료

코드 복사

방법 2 , 글로브를 사용하세요 glob() 함수는 일반 쉘에서 사용하는 규칙과 유사하게 libc glob() 함수에서 사용하는 규칙에 따라 패턴과 일치하는 모든 파일 경로를 찾습니다. 약어 확장이나 매개변수 대체는 수행되지 않습니다. 일치하는 파일/디렉토리를 포함하는 배열을 반환합니다. 오류가 발생하면 FALSE를 반환합니다. 이 기능은 원격 파일에서는 작동하지 않습니다. 검사 중인 파일은 서버의 파일 시스템을 통해 액세스해야 합니다. 이 기능은 특정 디렉터리에 있는 파일을 검색하는데 사용되는 기능으로 아티팩트(artifact)라고 할 수 있습니다.

예:

  1. /**
  2. * 현재 디렉터리의 모든 파일 가져오기
  3. * @param string $dir 경로 이름
  4. * @return array 모든 파일의 경로 배열
  5. */
  6. function get_files($dir) {
  7. $dir = realpath($dir) . "/";
  8. $files = array();

  9. if (!is_dir($dir)) {

  10. return $files;
  11. }

  12. $pattern = $dir . "*";

  13. $file_arr = glob($pattern);

  14. foreach ($file_arr as $file) {

  15. if (is_dir($file)) {
  16. $temp = get_files($file);

  17. if (is_array($temp)) {

  18. $files = array_merge($files, $temp);
  19. }
  20. }else {
  21. $files[] = $file;
  22. } / / end if
  23. }
  24. return $files;
  25. } // 함수 종료
  26. ?>

코드 복사

방법 3, 디렉토리 클래스 사용 디렉토리를 읽기 위한 가짜 객체 지향 메커니즘입니다. dir() 함수는 디렉토리 핸들을 열고 객체를 반환합니다. 이 객체에는 read(), rewind() 및 close()의 세 가지 메서드가 포함되어 있습니다. 그리고 두 가지 속성을 사용할 수 있습니다. 핸들 속성은 readdir(), rewinddir() 및 Closedir()과 같은 다른 디렉터리 함수에서 사용할 수 있습니다. path 속성은 열려 있는 디렉터리의 경로로 설정됩니다. 성공하면 함수는 디렉터리 스트림을 반환하고, 그렇지 않으면 false와 오류를 반환합니다. 함수 이름 앞에 "@"을 추가하면 오류 출력을 숨길 수 있습니다. 참고: 읽기 메소드가 반환하는 디렉토리 항목의 순서는 시스템에 따라 다릅니다. 참고: 이 함수는 내부 클래스 Directory를 정의합니다. 즉, 사용자 자신의 클래스를 동일한 이름으로 정의할 수 없습니다.

예:

  1. /**
  2. * 현재 지정된 디렉토리의 모든 파일을 반복적으로 표시
  3. * dir 함수 사용
  4. * @param string $dir 디렉토리 주소
  5. * @return array $files 파일 목록
  6. * @site bbs. -home.org
  7. */
  8. function get_files($dir) {
  9. $files = array();

  10. if (!is_dir($dir)) {

  11. return $files;
  12. }

  13. $d = dir($dir);

  14. while (false !== ($file = $d->read())) {
  15. if ($file != '.' && $file != '..') {
  16. $filename = $dir . "/" . $file;

  17. if(is_file($filename)) {

  18. $files[] = $filename;
  19. }else {
  20. $files = array_merge($files, get_files($filename));
  21. }
  22. }
  23. }
  24. $d ->close();
  25. $files 반환;
  26. }

코드 복사

방법 4, RecursiveDirectoryIterator 클래스 사용 이 방법은 PHP 5.0부터 유효합니다

예:

  1. /**
  2. * RecursiveDirectoryIterator를 사용하여 파일을 탐색하고 모든 파일 경로 나열
  3. * @param RecursiveDirectoryIterator $dir은 디렉터리의 RecursiveDirectoryIterator 인스턴스를 지정합니다
  4. * @return 배열 $files 파일 목록
  5. */
  6. function get_files($dir) {
  7. $files = array();

  8. for (; $dir->valid(); $dir->next()) {

  9. if ($ dir->isDir() && !$dir->isDot()) {
  10. if ($dir->haschildren()) {
  11. $files = array_merge($files, get_files($dir- >getChildren()));
  12. };
  13. }else if($dir->isFile()){
  14. $files[] = $dir->getPathName();
  15. }
  16. }
  17. return $files;
  18. }

  19. $path = "/var/www";

  20. $dir = new RecursiveDirectoryIterator($path) ;
  21. print_r(get_files($dir));

코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.