[PHP] 파일 읽기/쓰기/목록 메쏘드

class mh_files {


var $handle;
// 디렉토리를 여닫기 위한 핸들러.
var $listz=array();
// 목록 배열
var $file;
// 파일 목록용
var $fp;
// 파일 포인트
var $cont;
// 파일 내용(content)


/*

디렉토리 내 파일 목록 출력 메쏘드 fl()

작성 : 4340.01.13.
예시 :

파일은 1.php와 2.php 두 개, 디렉토리는 dir_1 하나가 있다고 한다.

$file=new mh_files;
$list=$file->fl();
print_r($list);

결과 :

Array (
[file] =>
Array (
[0] => 1.php [1] => 2.php
)
[dir] =>
Array (
[0] => dir_1
)
[file_cnt] => 2
[dir_cnt] => 1
)

*/



function fl($path=".") {
// 경로를 매개변수로 입력받되 없으면 현재 디렉토리를 입력.

$i=0;
$j=0;
$this->listz['file']=array();
$this->listz['dir']=array();
// 초기화

$this->handle=opendir($path);
// 경로를 열어 핸들러 변수에 저장
while (false !== ($this->file = readdir($this->handle))) {
// 핸들러 변수에 해당하는 경로의 데이터를 얻어 file 변수에 저장하고 끝까지 루프를 돈다
if($this->file!="." && $this->file!="..") {
// 자신과 상위 디렉토리를 나타내는 .과 ..를 뺀다.
if(!is_dir($this->file)){
// 읽어온 게 디렉토리가 아니라면
array_push($this->listz['file'],$this->file);
// listz 배열의 file 키에 읽어 온 순서대로 저장한다.
$i++;
// 파일 개수
} else {
// 디렉토리라면
array_push($this->listz['dir'],$this->file);
// listz 배열의 dir 키에 읽어 온 순서대로 저장한다.
$j++;
// 디렉토리 개수
}
}
}
closedir($this->handle);
// 핸들러 변수 닫고.
$this->listz['file_cnt']=$i;
$this->listz['dir_cnt']=$j;
// listz 배열의 file_cnt와 dir_cnt에 각기 파일과 디렉토리 개수를 넣는다.

return $this->listz;
// 마지막으로 listz 배열을 통째로 돌려준다.

}


/*

파일 내용 읽기 메쏘드 fr()

작성 : 4340.01.13.
예시 :

$file=new mh_files;
$cont=$file->fr('1.txt');
echo nl2br($cont);

*/

function fr($filename){
// 파일명을 매개변수로 받는다.

if(file_exists($filename)){
// 파일이 있는가를 검사하여 있으면
$this->fp=fopen($filename,"r");
// 파일을 읽기모드로 읽는다.
$this->cont=fread($this->fp,filesize($filename));
// 파일의 크기만큼을 읽어서 cont 변수에 저장.
fclose($this->fp);
// 파일 닫기.
} else {
// 파일이 없으면
$this->cont="파일 없음";
// cont 변수에는 '파일 없음'이란 문자열을 넣는다.
}

return $this->cont;
// cont 변수를 돌려준다.

}


/*

파일 쓰기 메쏘드 fs()

작성 : 4340.01.13.
예시 :

$file=new mh_files;
$text="가


라";
$file->fs('1.txt',$text);

결과 :





*/

function fs($filename,$cont,$mode="w") {
// 파일명과 쓸 내용, 모드를 매개변수로 받는다. 모드는 기본적으로 쓰기 모드.

$this->fp=fopen($filename, $mode);
// 파일포인터 설정.
if(flock($this->fp, LOCK_EX))
// 파일 잠금 장치
{
fwrite($this->fp,$cont);
// 내용물을 파일포인터에 쓴다.
fclose($this->fp);
// 파일 닫기
}

return true;

}

}

by 서찬휘 | 2007/01/13 05:38 | 셈틀놀이 | 트랙백 | 덧글(2)

트랙백 주소 : http://seochnh.egloos.com/tb/1489488
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 서찬휘 at 2007/01/13 05:48
역시 이것만으로는 클래스화가 굳이 필요하지 않을지도 모르지만. 일단 부품화라는 차원에서 해 두었습니다. 다음은 데이터를 RSS 데이터로 만드는 것을 클래스로 짜 볼까 합니다. 파일로 저장할 때엔 여기서 만든 mh_files->fs()를 쓰면 되겠지요.

한편 RSS 관련해서는 어떤 데이터는 형식에 맞춰 넣기만 하면 RSS 포맷으로 맞춰주는 거와 RSS를 해석해 배열에 넣어 뿌려주는 것 등이 들어갈 수 있을 겁니다. 간이 RSS 리더기를 제작할 수 있으면야 좋긴 할 텐데- 쉽진 않겠죠.

그리고 mh_files 클래스에 하나 더 들어감직한 메쏘드가 파일 업로드에 관련한 겁니다. 파일을 전송하면 불러만 오면 파일 저장과 각 파일 분석, 이미지인 경우 확장자와 가로 세로 너비 등을 한 번에 정리해줄 수 있다면- 제법 쓸 만 하겠죠.
Commented by DECRO at 2007/01/13 10:48
꽤나 편리하겠군요.
JSP계열쪽에선 그런것들 개발하다가 귀찮아서 모듈 떼어와서 하고 있습니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶