PHP file 시스템

Programming/PHP 2011. 6. 28. 01:51
http://essay79.tistory.com/29 에서 퍼왔습니다

파일 입출력 작업은 크게 3단계의 과정으로 처리된다.

 *** 파일의 3단계 입출력 작업***
    여는 단계 : 파일을 조작하기 전의 준비 단계로 파일 조작 방식,파일 존재 확인,메모리 공간을 확보하는 단계
    조작 단계 : 실제 파일을 읽거나 쓸 수 있는 조작 단계
    닫는 단계 : 파일 조작에 사용하였던 메모리 등의 자원을 반환하는 단계

(1). 파일을 열고 닫아주는 함수 : fopen() , fclose() 
 fopen 함수는 문서, 그림 등의 외부 파일을 열어주는 함수이고
 fclose 함수는 열린 파일을 닫아주는 함수이다.

$변수명 = fopen(파일명,파일모드,인크루드 경로) ===>열고싶은 파일의 경로와,파일모드 설정을인자로.(파일모드반드시 설정해야 한다. 파일 경로에 파일을 찾지 못하면 'false'값을 반환한다. 
$변수명 = fclose(fopen()함수로 설정한 $변수명)

fopen() 함수의 파일 모드
   r : 파일 읽기 전용
  w : 파일 쓰기 전용 (파일이 있으면 파일의 크기를 0으로 만들고, 없으면 새 파일을 만듦)
  a : 파일 쓰기 전용 (파일이 존재하면 그 파일의 끝에 덧붙여 쓰고, 없으면 새 파일을 만듦)
  r+ : 파일 읽고 쓰기 전용
 w+ : 파일 읽고 쓰기 전용 (파일이 존재하면 크기를 0으로 만들고, 없으면 새 파일을 만듦)
 a+ : 파일 읽고 쓰기 전용 (파일이 이미 존재하면 끝에 덧붙여 쓰고, 없으면 새 파일을 만듦)
   b : 바이너리 데이터로 설정(생략 가능)

fopen()함수 사용에 따른 경로명 설정
 $fp = fopen("c:/apm_setup/htdocs/test.txt","r")    :    windows의 경로 지정
 $fp = fopen("http://www.naver.com/","r")    :   http server의 경로 지정
 $fp = fopen("ftp://user:cpro3002@naver.com/","w")   :  ftp server의 경로 지정

============================================================================================================
<?
  echo "<B> *** fopen()함수로 파일 열고 fclose()함수로 닫기***</B> <hr>";
  $fp = fopen("test.dat","r");  //php파일과 같은 폴더에 있으면 경로명 생략.
  if($fp==null){
   echo "존재하지 않은 파일 !!";
  }else{
   echo "파일 열기 성공 !! "; 
      fclose($fp);   
  }
?>
========================================================================================================
(2). 파일의 존재 여부를 알려주는 함수 : file_exists() 함수
 ; 파일을 열고자 할 때 파일이 존재하지 않으면 에러가 발생하기 때문에 파일이 존재하는지를 먼저 검사한 다음에
열어야 한다. 파일이 존재하면 ' 1 '을  , 존재하지 않으면 ' 0 ' 의 값을 반환한다.

file_exists(파일 경로)
========================================================================================================
<?
 echo "<B>***파일의 존재 유무를 확인하는 file_exists()함수</B> <hr>";
 echo " 찾고자 하는 파일 : <b> sample.dat </b> <br>";
 echo "---------------------------------------------<br>";
 $a = "sample.dat";

 if(file_exists($a)){
  echo " O. 파일이 존재 확인완료!!";
 }else{
  echo " X. {$a} 존재하지 않는 파일!!";
 }
?>

설명 : 'test.php'파일과 찾고자 하는 'sample.dat' 파일이 같은 폴더에 존재하는지에 대한 출력 결과이다. 특정 폴더에 존재하는지의 유무를 확인하기 위해서는 반드시 특정 폴더의 경로명을 지정해야 한다.
========================================================================================================
(3). 파일의 크기를 알려주는 함수 : filesize() 함수  

파일의 크기를 byte 단위로 알려주는 함수이며, 영문은 1byte , 한글과 enter은 2byte로 계산된다.

<?
 echo "<B>*** filesize()함수로 불러온 파일의 크기</B><br>";
 echo "<b>sa.txt</b> 파일에 입력된 내용<br>";
 echo "--------------------------------------<br>";
 echo "안녕하세요..[엔터]<br>";
 echo "Hi~ <br>";
 echo "--------------------------------------<br>";
 $size = filesize("sa.txt");
 echo " >>> sa.txt 파일의 크기는 {$size}byte 입니다.";
?>
=========================================================================================================
(4).데이터를 읽고 쓰는 함수 : fread() 함수, fwrite() 함수

파일의 데이터를 읽을 때는 fread() 함수를 사용하고, 파일에 데이터를 기록할 때는 fwrite() 함수를 사용한다.
fread() 함수는 파일 포인터 위치에서 크기만큼 읽어서 문자열을 반환해 주고, 2진수 파일인 바이너리로 읽는다.
파일 포인터란 파일의 주소값을 의미하며, 파일 주소부터 크기만큼 읽어 온다.

fwrite() 함수는 파일을 기록하며, 파일 포인터 위치에 문자열을 기록하고 바이너리로 쓴다. length값이 주어지지
않았을 경우에는 주어지 문자열 길이만큼 기록하고, 실제 문자열보다 긴 문자열의 길이가 주어지면 문자열의
길이만큼만 기록한다.

 fread(파일포인터, 크기)
 fwrite(파일포인터, 내용)

<?
 echo "<B>***파일의 내용을 읽어와 다른 파일로 기록하는 함수 *** </B><hr>";
 $fn = "extest.txt";
 echo " 읽어올 파일 : <b> {$fn} </b><br>";
 if(file_exists($fn)){  //파일 존재 유무 확인
  $fp = fopen($fn,"r");  //파일이 존재하면 파일 열기
  echo "파일 열기 성공!!(파일에 들어있는 내용입니다..)<br><hr>";
 }else{
  echo "파일이 없습니다..<br>";
  exit;
 }
 $content = fread($fp,filesize($fn));
 $content = str_replace("\n","<br>",$content);
 echo $content;
 $fw = fopen("happy.txt","a");
 fwrite($fw,$content);
 fclose($fp);
 
 echo "<hr>";
 echo " >>> 윈도우 탐색기 창에서 새롭게 만들어진 ";
 echo " <b>\"happy.txt\"</b> 파일을 확인하세요!!<br>";
?>
==========================================================================================================
(5) . 디스크 공간을 확인하는 함수 : disk_total_space(), disk_free_space() 함수

disk_total_space("디스크명")   //디스크의 전체 공간
disk_free_space("디스크명") //디스크의 여유 공간

<?
 echo "<B>***디스크의 저장공간과 전체공간 byte를 반환하는 함수 ***</B><br>";
    echo " C 드라이브의 전체 용량 <br><br> ";
 $dsize = disk_total_space("c:/"); //전체 용량
 $gsize = ($dsize / 1024 / 1024 / 1024); // GB로 환산
 $by = number_format($dsize);
 $gb1 = number_format($gsize);   //세자리마다 콤마(소수점 없어짐)
 echo "...[ {$by} bytes ]<br>";  //byte 단위로 출력
 echo "...<b>[ {$gb1} GB ]</b><br><hr>";  //GB 단위로 출력

 echo " C 드라이브의 남은 용량 <br><br>";
 $dsize = disk_free_space("c:/");
 $gsize = ($dsize / 1024 / 1024 / 1024);
 $by = number_format($dsize);
 $gb2 = number_format($gsize);  //세자리마다 콤마(소수점 없어짐)
 echo "...[ {$by} byte ]<br>";
 echo "...<b>[ {$gb2} GB ] </b><hr>";
 $tot = ($gb2 / $gb1) * 100;  //남은 비율 계산(%);
 $total = number_format($tot);
 echo " 전체 <b>{$gb1}GB</b> 중 ";
    echo " <b>{$gb2}GB</b> 남음 <b>[{$total}%]</b><br>";
?>
===============================================================================================================
(6). 파일 정보를 검출하는 함수 : fgets(),  fputs(),  feof() 함수

fgets() 함수는 파일에서 크기만큼 데이터를 읽어오는 함수로 크기가 파일의 한행의 크기보다 크더라도 한 행씩 읽어들이고, fputs() 함수는 내용을 파일에 기록하는 함수이다. 또한 feof() 함수는 파일에서 파일의 끝을 검사하는 함수이다.

fgets(열고자 하는 파일명의 변수, 크기);
fputs(열고자 하는 파일명의 변수, 내용);
feop(파일 포인터);

<?
 echo "<B>***파일의 정보를 검출하는 함수***</B><hr>";
 $fn = "good.txt";
 if(file_exists($fn)){    //파일 존재 여부 
  $fp = fopen($fn,"r");  //파일 열기
 }else{
  echo "파일이 없습니다. 다시 확인해주세요..";
  exit;
 }
 $fw = fopen("sa.txt","a");  //파일 열기
 while(!feof($fp)){  //파일의 끝이 아닐 동안 실행
  $line = fgets($fp,800);  //한 라인씩 읽어 들임
  echo "읽어온 내용:{$line}<br>";
  fputs($fw,$line);  //파일에 기록
 }
 fclose($fp);
?>
=========================================================================================================
(7). 디렉터리를 열고 다는 함수 : opendir() , readdir() , closedir() 함수

<?
 echo "<B>***루트 디렉터리 안에 있는 'ohTest' 디렉터리 열기***</B><hr>";
 echo " 경로명...<B>\"c:/APM_Setup/htdocs/ohTest/\" </B><br>";
 echo "------------------------------------------------<br>";
 $dir = "c:/APM_Setup/htdocs/ohTest/"; //경로명을 변수에 저장
 if(is_dir($dir)){  //디렉터리 존재 유무 판별
  if($dirop = opendir($dir)){  //디렉터리가 존재하면 열기
   while(($filerd = readdir($dirop))!=false){ //열려진 디렉터리 파일 읽기
   echo "파일명 : [ {$filerd} ]<br> "; //읽어 들인 파일 출력
   }
     echo "--------------------------------------------<br>";
  }
 }else{
   echo "존재하지 않는 디렉터리입니다.";
 }
 closedir($dirop);  //열려진 디렉터리 닫기
?>
========================================================================================================
(8). 디렉터리의 위치 확인과 위치를 변경하는 함수 : getcwd() 함수, chdir() 함수

현재 디렉터리의 위치를 알아내는 getcwd() 함수를 사용하여 현재 디렉터리의 위치를 알아낸 다음, chdir() 함수를
사용하여 위치를 변경할 디렉터리의 경로를 지정한다. 현재의 위치에서 변경된 디렉터리의 위치를 확인하기 위해
getcwd() 함수를 사용한다.

getcwd() //현재의 데렉터리 위치를 확인
chdir  (디렉터리의 위치를 변경할 경로명)

<?
 echo "<B>***현재 디렉터리의 위치와 변경 후 디렉터리의 위치확인***</B><br>";
 echo "변경할 위치 ... <B>\"d:\wordk\" </B><br>";
 echo "--------------------------------------------<br>";
 echo " 현재 디렉터리의 위치 ... ";
 $path = getcwd();     //현재의 디렉터리 위치
 echo "{$path} <br>";
 chdir("d:/test/");    //변경할 위치의 경로명   
 $path = getcwd();     //변경된 디렉터리 위치
 echo "--------------------------------------------<br>";
 echo " 변경 후 디렉터리의 위치... ";
 echo "{$path}<br>";
 echo "--------------------------------------------<br>";
?>
===========================================================================================================