경로의 (서브포함)파일과 폴더를 XML로 표현하는 함수

<?
header('Content-type: text/xml; charset=UTF-8');

$gmt = gmdate('D, d M Y H:i:s', time()+3600).' GMT'; header("Expires: ".$gmt); // Date in the past

require_once('_inc.cfg.php'); //설정파일

function getStat($path){
 $arr = stat($path);
 unset($arr[0]);
 unset($arr[1]);
 unset($arr[2]);
 unset($arr[3]);
 unset($arr[4]);
 unset($arr[5]);
 unset($arr[6]);
 unset($arr[7]);
 unset($arr[8]);
 unset($arr[9]);
 unset($arr[10]);
 unset($arr[11]);
 unset($arr[12]);
 $arr['path']=iconv('euc-kr','utf-8',$path);
 $arr['enc_path']=rawurlencode($path);
 $arr2 = pathinfo($path);
 $arr['dirname'] = iconv('euc-kr','utf-8',$arr2['dirname']);
 $arr['enc_dirname'] = rawurlencode($arr2['dirname']);
 $arr['basename'] = iconv('euc-kr','utf-8',$arr2['basename']);
 $arr['enc_basename'] = rawurlencode($arr2['basename']);
 $arr['extension'] = strtolower($arr2['extension']);
 $arr['label'] = $arr['basename'];
 return $arr;
}
function pathToXML($path,$exp_allow=null){
 if ($handle = opendir($path)) {
  while (false !== ($file = readdir($handle))) {
   if ($file != "." && $file != "..") {
    $filePath = $path.'/'.$file;
    if(is_dir($filePath)){
     $info = getStat($filePath);
     print("\n<dir ");
     foreach($info as $key=>$val){
      print($key.'="'.htmlspecialchars($val,ENT_QUOTES).'" ');
     }
     print('type="dir" ');
     print('>');
     pathToXML($filePath,$exp_allow);
     print("</dir>");
    }else if(is_file($filePath)){
     $info = getStat($filePath);
     if($exp_allow!=null && !in_array($info['extension'],$exp_allow)){
      continue;
     }
     print("\n<file ");
     foreach($info as $key=>$val){
      print($key.'="'.htmlspecialchars($val,ENT_QUOTES).'" ');
     }
     print('type="file" ');
     print(' />');
    }
   }
  }
  @closedir($handle);
 }
}
//=====
print('<?xml version="1.0" encoding="UTF-8"?>'."\n");
print('<files>');
//pathToXML($path['clip'],$exp['allow']); //$path['clip'] : 경로 ,  $exp['allow']:허용할 확장자 배열
pathToXML($path['clip']); //모든 확장자
print("\n".'</files>');
?>

 


그냥 FLASH의 콤퍼넌트와 연결할려고 만들어 본겁니다.
간단한 재귀형식으로 폴더와 파일을 가져와서 XML형식으로 바로 출력합니다.
기본적으로 EUC-KR의 서버안에서 UTF-8로 파일이름과 경로를 바꿔서 사용합니다.
앞에 enc_ 가 붙은건 urlencode 한것으로 이것을 사용해서 URL에 사용하시면 됩니다.
안붙은 것으로 할경우 언어셋 차이로 문제가 생깁니다.


결과예제

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1