디렉토리 정보, 즉 엔트리(Entry)를 얻고자 할때의 방법은 몇 가지있습니다. dir클레스를 이용하거나 readdir, scandir을 이용하는 것입니다.

dir 클레스를 이용한 entry 얻기

해당 디렉토리의 엔트리를 가져오기 위해서는 폴더를 먼저 "오픈"하고, "읽기", "닫기" 순으로 작성하면 됩니다.

 <?php
 $path 
"./mail"
// 오픈하고자 하는 폴더
 
$entrys = array(); 
// 폴더내 Entry를 저장하기 위한 배열
 
$dirs dir($path); 
// 오픈하기
 
while(false !== ($entry $dirs->read())){ 
// 읽기
    
$entrys[] = $entry
;
 }
 
$dirs->close(); 
// 닫기

 
var_export($entrys
);

 
/*
 결과:
 array (
  0 => '.',
  1 => '..',
  2 => 'Mail',
  3 => 'Mail.php',
  4 => 'package.xml',
  5 => 'PEAR.php',
  6 => 'tests',
 )
 */
 
?>


"."와 ".."는 기본적으로 entry 로 가져오게 됩니다. 이를 제외시켜줄 필요가 있으며, 폴더와 파일을 구분지어 정리해 줄 필요가 있겠지요. 다음과 같이 처리해 주면 됩니다.

 <?php
 $path 
"./mail"
// 오픈하고자 하는 폴더
 
$entrys = array(); 
// 폴더내의 정보를 저장하기 위한 배열
 
$dirs dir($path); 
// 오픈하기
 
while(false !== ($entry $dirs->read())){ 
// 읽기
    
if(($entry != '.') && ($entry != '..'
)) {
        if(
is_dir($path.'/'.$entry)) { 
// 폴더이면
             
$entrys['dir'][] = $entry
;
        }
        else { 
// 파일이면
             
$entrys['file'][] = $entry
;
       }
    }
 }
 
$dirs->close(); 
// 닫기

 
$dircnt count($entrys['dir']); 
// 폴더 수
 
$filecnt count($entrys['file']); 
// 파일 수

 
echo "폴더 수: ${dircnt} 파일 수:${filecnt}<br/>\n"
;
 
var_export($entrys
);

 
/*
 결과:
 폴더 수: 2 파일 수:3<br/>
 array (
  'dir' => 
  array (
    0 => 'Mail',
    1 => 'tests',
  ),
  'file' => 
  array (
    0 => 'Mail.php',
    1 => 'package.xml',
    2 => 'PEAR.php',
  ),
 )
 */
 
?>


readdir를 이용한 entry 얻기

readdir함수로 엔트리를 얻을 수 있지만 opendir 함수와 closedir 함수가 필요합니다. 순서는 같습니다. opendir 로 오픈하고, readdir 로 읽고, closedir 로 닫아 주면 됩니다.

 <?php
 $path 
"./mail"
// 오픈하고자 하는 폴더
 
$entrys = array(); 
// 폴더내의 정보를 저장하기 위한 배열
 
$dirs opendir($path); 
// 오픈하기
 
while(false !== ($entry readdir($dirs))){ 
// 읽기
    
$entrys[] = $entry
;
 }
 
closedir($dirs); 
// 닫기

 
var_export($entrys
);

 
/*
 결과:
 array (
  0 => '.',
  1 => '..',
  2 => 'Mail',
  3 => 'Mail.php',
  4 => 'package.xml',
  5 => 'PEAR.php',
  6 => 'tests',
 )
 */
 
?>


scandir를 이용한 entry 얻기

scandir함수는 (PHP 5)이상부터 지원을 합니다. 이하 버전에서는 오픈하고 읽고, 닫기 순으로 처리해 주어야 가능하지만, (PHP 5)부터 scandir 함수 하나로 모든 처리가 가능해 졌습니다.

array scandir ( string $directory [, int $sorting_order [, resource $context ]] )

$directory 은 탐색할 디렉토리, $sorting_order 은 정렬 순서입니다. $sorting_order 에 1을 대입하면 역순으로 데이터를 정렬합니다.

 <?php
 $dir    
'/tmp'
;
 
$files1 scandir($dir); 
// 오름차순으로 엔트리 얻기
 
$files2 scandir($dir1); 
// 내림차순으로 엔트리 얻기

 
print_r($files1
);
 
print_r($files2
);

 
/*
 결과:
 Array
 (
    [0] => .
    [1] => ..
    [2] => bar.php
    [3] => foo.txt
    [4] => somedir
 )
 Array
 (
    [0] => somedir
    [1] => foo.txt
    [2] => bar.php
    [3] => ..
    [4] => .
 )
 */
 ?> 


readdir함수로도 가능합니다.

<?php
 $dir 
"/tmp"
;
 
$dh  opendir($dir
);
 while (
false !== ($filename readdir($dh
))) {
    
$files[] = $filename
;
 }

sort($files); 
// 오름차순으로 정렬

print_r($files
);

rsort($files); 
// 내림차순으로 정렬

print_r($files
);

 
/*
 결과:
 Array
 (
    [0] => .
    [1] => ..
    [2] => bar.php
    [3] => foo.txt
    [4] => somedir
 )
 Array
 (
    [0] => somedir
    [1] => foo.txt
    [2] => bar.php
    [3] => ..
    [4] => .
 )
 */
 ?>


블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요