본문 바로가기
IT/web

[PHP] readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기

by 어느해겨울 2022. 1. 6.

 

readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기

 

opendir, readdir, is_dir 함수를 사용하는 재귀 함수로 구성하였다.

디렉터리는 제외하고 파일만 조회하고 탐색된 전체 경로(full path)를 배열로 반환한다.

사용방법은 함수의 인자로 탐색할 경로를 명세하면 된다.

 

https://github.com/muabow/home/tree/main/src/php/get_file_list

 

GitHub - muabow/home: C/C++, PHP, GO source/library

C/C++, PHP, GO source/library. Contribute to muabow/home development by creating an account on GitHub.

github.com

 

소스코드

<?php
	function get_file_list($_target_dir) {
		if( $fp = opendir($_target_dir) ) {
			$files = Array();
			$in_files = Array();

			while( $file = readdir($fp) ) {
				if( $file[0] != '.' ) {
					if( is_dir("{$_target_dir}/{$file}") ) {
						$in_files = get_file_list("{$_target_dir}/{$file}");

						if( is_array($in_files) ) {
							$files = array_merge($files, $in_files);
						}

					} else {
						array_push($files, "{$_target_dir}/{$file}");
					}
				}
			}
			closedir($fp);

			return $files;
		}
	}
?>

 

사용방법

<?php
	// /var/log/apache2 경로를 탐색한다.
    
	$arr_file_list = get_file_list("/var/log/apache2");
	print_r($arr_file_list);
?>

 

결과

muabow@muabow:~/public_html$ php get_file_list.php
Array
(
    [0] => /var/log/apache2/error.log.14.gz
    [1] => /var/log/apache2/access.log.3.gz
    [2] => /var/log/apache2/access.log.12.gz
    [3] => /var/log/apache2/other_vhosts_access.log.1
    [4] => /var/log/apache2/error.log.12.gz
    [5] => /var/log/apache2/access.log.14.gz
    [6] => /var/log/apache2/error.log.5.gz
    [7] => /var/log/apache2/error.log.2.gz
    [8] => /var/log/apache2/error.log.8.gz
    [9] => /var/log/apache2/access.log.6.gz
    [10] => /var/log/apache2/access.log.8.gz
    [11] => /var/log/apache2/other_vhosts_access.log
    [12] => /var/log/apache2/error.log.9.gz
    [13] => /var/log/apache2/access.log.1
    [14] => /var/log/apache2/error.log.11.gz
    [15] => /var/log/apache2/access.log
    [16] => /var/log/apache2/error.log
    [17] => /var/log/apache2/error.log.3.gz
    [18] => /var/log/apache2/access.log.2.gz
    [19] => /var/log/apache2/access.log.10.gz
    [20] => /var/log/apache2/access.log.9.gz
    [21] => /var/log/apache2/error.log.7.gz
    [22] => /var/log/apache2/error.log.1
    [23] => /var/log/apache2/access.log.11.gz
    [24] => /var/log/apache2/access.log.4.gz
    [25] => /var/log/apache2/access.log.5.gz
    [26] => /var/log/apache2/error.log.6.gz
    [27] => /var/log/apache2/access.log.7.gz
    [28] => /var/log/apache2/error.log.13.gz
    [29] => /var/log/apache2/error.log.10.gz
    [30] => /var/log/apache2/error.log.4.gz
    [31] => /var/log/apache2/access.log.13.gz
)

 

해당 함수는 파일 탐색 시 전체 경로를 배열로 반환하기 때문에 파일을 제어해야 하는 상황에 유용하게 사용된다.

 

끝.

 

 

댓글