<?
/**
# Auth : shkim
# Email : isunnyk@empal.com, idxzone@naver.com
# Start Date : 2003.09
# Last Date : 2004.02.09.Mon
# Description : Dir..
### 특이사항 한가지..
fileNUMofDIR( $dir ...) 에서... $dir 의 권한이 700 이어도 읽혀진다.. 신기하다.. dir()이라는 함수자체가 그런가? --aa
####### 사용법 #######
include 'class.sh_dir_cls.inc';
$cls_D = new Xena_Dir();
$dir = $cls_D->CurDir;
$t = $cls_D->fileNUMofDIR( $dir, $opt='num_dir');
echo '<br>서브 디렉토리 갯수 : ' . $t[xNo_sub_dir];
echo '<br>서브 파일 갯수 : ' . $t[xNo_sub_file];
echo '<br>서브 all 갯수 : ' . $t[xNo_sub_all];
echo '<br>목록들. : ' . $t[zz_OutPut];
print_r($t); echo '<hr>';
#####
$name_of_fileDir = 'class';
$x = $cls_D->xena2_find_fileName($dir, $opt, $name_of_fileDir);
if( $x < 0 ){
echo $cls_D->ErrorMsg;
}else{
if( is_array($x) ){
echo "<hr>찾는 단어 : " . $name_of_fileDir . '<br>';
echo '찾은 갯수 : '. $x[find_No] . '<br>';
print_r( $x[find_Str] ) ;
}
}
####################
**/
class Xena_Dir{
var $viewDirSubFile_Lists_Sep = "<br>\n";
var $CurDir; //현재 디렉토리. 절대경로
var $ErrorMsg;
/******* Basic *********************/
function Xena_Dir($d=''){
if( ! trim($d)){
$d = '.'; //현재 디렉토리
}
$this->CurDir = realpath($d); //절대 경로로 바꾸어서.
if( ! is_dir( $this->CurDir) ){
$this->ErrorMsg = '[Error] : 디렉토리가 아니거나, 존재하지 않는 디렉토리입니다.';
return false;
}
return true;
}
function fileNUMofDIR( $dir, $opt='', $viewType=''){
//이 함수에서 굳이 $dir 를 주는이유는... 이 함수가 재귀함수이기 때문이다.
//$opt : 파일의 갯수만 리턴할 것인지, 아지면 서브디렉토리의 갯수도 포함할 것인지.
//$opt : 'num_file', 'num_all' , 'num_dir'
switch($opt){
case 'num_all':
case 'num_file':
case 'num_dir':
break;
default :
$opt = 'num_all';
break;
}//end switch
$dir = realpath($dir); //절대 경로로 바꾸어서.
if( ! is_dir($dir) ){
$this->ErrorMsg = "<p>[Error]" . " File: " . __FILE__ . " on line: " . __LINE__ . '<br>';
return false;
}
$nl = $this->viewDirSubFile_Lists_Sep; //개행..br
#echo ' [<b>' . $dir. '/ </b> 디렉토리]' . '<p>';
$no_all = 0; $no_file = 0; $no_dir = 0;
$uuuu = '';
unset($View_all);
unset($View_file);
unset($View_dir);
$d = dir($dir); //object...
while( $entry = $d->read() ){
if( $entry != '.' && $entry != '..' ){ //자기자신, parent..
$no_all++; //현재위치에서의...전체 : 파일+디렉
$dir2 = $dir. '/'. $entry;
if( ! is_dir($dir2) ){
$no_file++; //현재위치에서의... 파일의 갯수..
switch($opt){
case 'num_all':
#echo $dir. '/'. $entry. $nl;
$View_all .= $dir. '/'. $entry. $nl;
break;
case 'num_dir':
break;
case 'num_file':
#echo $dir. '/'. $entry. $nl;
$View_file .= $dir. '/'. $entry. $nl;
break;
}//end switch
}else{
$no_dir++; //현재위치에서의...
$z = $this->fileNUMofDIR($dir2, $opt , $viewType);
$no_all += $z[xNo_sub_all];
$no_file += $z[xNo_sub_file];
$no_dir += $z[xNo_sub_dir];
$uuuu = $uuuu . $z[zz_OutPut];
switch($opt){
case 'num_all':
#echo $dir. '/'. $entry. '/'. $nl;
$View_all .= $dir. '/'. $entry. '/'. $nl;
break;
case 'num_dir':
#echo $dir. '/'. $entry. '/'. $nl;
$View_dir .= $dir. '/'. $entry. '/'. $nl;
break;
case 'num_file':
break;
}//end switch
}
}
}//while
#####@@@@@@@@@@@#####
switch($opt){
case 'num_all':
$my_out_put_TT = $View_all;
break;
case 'num_file':
$my_out_put_TT = $View_file;
break;
case 'num_dir':
$my_out_put_TT = $View_dir;
break;
}//switch
if( ! strcmp($viewType, 'view_p') ){
#echo $my_out_put_TT ;
}
$xx = $my_out_put_TT;
$outPut = $xx. $uuuu;
#####@@@@@@@@@@@#####
return array('xNo_sub_all'=>$no_all, 'xNo_sub_file'=>$no_file, 'xNo_sub_dir'=>$no_dir, 'zz_OutPut'=>$outPut);
}//end function fileNUMofDIR
/******* Basic *********************/
/******* appended *********************/
function get_Permission($dir){
//return : 755, 644
$file_dir = $dir;
$f = $file_dir;
if( ! $f ){
return false;
}
if( ! file_exists($f)){
echo "<br>[$f]는 존재하지 않습니다.<br>";
return false;
}
$n = fileperms($f);
$octal = sprintf("%o", $n); ## 8진수로
//$octal = base_convert($n, 10, 8); ## 8진수로
//$octal = decoct($n); ## 8진수로
$perm = substr($octal, -3); ## 755, 644
return $perm;
}
function xena2_find_fileName($dir, $opt, $name_of_fileDir){
$name_of_fileDir = trim($name_of_fileDir);
if( ! $name_of_fileDir ){
$this->ErrorMsg = '<p>[Error] : 찾고자하는 파일명/디렉토리명을 입력하시오.';
return -1;
}
$tmpAry = $this->fileNUMofDIR( $dir, $opt);
if( $tmpAry[xNo_sub_all] <= 0 ){
return 0; //발견하지 못함 . 에러는 아님
}else{
$d = realpath($dir);
$find_No = 0;
$find_Ary = array();
$cprMSG = $tmpAry[zz_OutPut];
$tmp2 = explode( $this->viewDirSubFile_Lists_Sep , $cprMSG);
$cnt = count($tmp2);
for($i=0; $i<$cnt; $i++){
$oneLine = $tmp2[$i];
$oneLine = ereg_replace("^($d)", '', $oneLine); //find 명령어는 주어진 디렉토리의 하위를 검색하므로.
if( $oneLine ){
if( ereg("($name_of_fileDir)", $oneLine ) ){ //찾고자 하는 단어가 발견되는가?
$find_No++;
$find_Ary[] = $tmp2[$i];
}
}
#echo $oneLine . '<br>';
}//for
#echo '<hr>$find_No==' . $find_No;
#print_r($find_Ary);
if( $find_No == 0 ){
return 0; //발견하지 못함 . 에러는 아님
}else{
return array('find_No'=>$find_No, 'find_Str'=>$find_Ary);
}
}
}
/******* appended *********************/
}//end class
?>
'인터넷정보' 카테고리의 다른 글
table_sql 을 엑셀파일로 다운받기. (0) | 2007.10.16 |
---|---|
table_sql 을 엑셀파일로 다운받기. (0) | 2007.10.16 |
session_save_path() 2 (0) | 2007.10.16 |
session_save_path() 2 (0) | 2007.10.16 |
디렉토리..class.sh_dir_cls.inc (0) | 2007.10.16 |
파일업로드 삭제 클래스 (0) | 2007.10.16 |
파일업로드 삭제 클래스 (0) | 2007.10.16 |
문자열 내의 HTML 태그를 모두 없애는 방법 (0) | 2007.10.16 |
문자열 내의 HTML 태그를 모두 없애는 방법 (0) | 2007.10.16 |
파일네임 금지 (0) | 2007.10.16 |