주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

PHP 입문 - 파일 처리 일반, 특수기호

광수 | 2001.10.17 00:24:10 댓글: 0 조회: 628 추천: 5
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758808
▶ PHP 입문 - 파일 처리 일반, 특수기호

실제 프로그램을 작성하기에 앞서 알아둬야할 기본적인 문법들입니다.


파일 읽기와 파일 쓰기를 통해 간단한 입출력을 알아보았고, 이번에는 이를 조금 더
활요하는 방법에 대해 다뤄보도록 하겠습니다.


▷ 파일에 내용 추가

fopen() 함수에서 파일명, 모드를 인자로 받습니다. 이 모드의 종류부터 살펴보면
다음과 같습니다.

'r'  - 읽기전용으로 열립니다; 파일포인터를 파일의 맨 앞에 놓습니다.
'r+' - 읽기 쓰기가 가능합니다; 파일 포인터를 파일의 맨 앞에 놓습니다.
'w'  - 쓰기 전용으로 열립니다; 파일 포인터를 파일의 맨 앞에 놓습니다.
       그리고 파일의 크기를 0으로 만듭니다. 파일이 없으면 만듭니다.
'w+' - 읽기 쓰기가 가능합니다; 파일포인터를 파일의 맨 앞에 놓습니다.
       그리고 파일의 크기를0으로 만듭니다. 파일이 없으면 만듭니다.
'a'  - 쓰기 전용으로 열립니다; 파일 포인터를 파일의 끝에 놓습니다.
       파일이 없으면 만듭니다.
'a+' - 읽기 쓰기가 가능합니다; 파일 포인터를 파일의 끝에 놓습니다.
       파일이 없으면 만듭니다.

r,w는 다루어봤고 이번에는 a 모드를 이용한 예제를 통해 어떤 식으로 사용되는지
살펴보도록 하겠습니다. 먼저 내용을 기록해둬야겠죠?

예제 : http://dreamphp.com/study/exam16-1.txt

소스는 다음과 같습니다.

가나다라마바사아자차카타파하


위의 텍스트 파일이 기존에 있다는 가정하에 진행합니다. 전편 파일 쓰기를 이해한
분은 쉽게 만들 수 있겠죠? 또한 만들지 못했다 하더라도 단순히 위의 내용의 파일을
만들어 올려둔 다음 퍼미션을 777로 변경해두면 액세스가 가능합니다. 그럼 위 내용에
새로운 내용을 추가해볼까요?


예제 : http://dreamphp.com/study/exam16-1.php

소스는 다음과 같습니다.

<?
$filename = "exam16-1.txt";

// 내용 추가
if (filesize($filename) < 100) {
  $fp = fopen($filename, "a");
  fwrite($fp,"<br>ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  fclose($fp);
}

// 파일 읽기
$fp = fopen($filename, "r");
$data = fread($fp, filesize($filename));
fclose($fp);

// 내용 출력 2
echo "내용 : ".$data;
?>

먼저 파일명을 지정해뒀고, 파일의 크기를 구해 100보다 작을 경우 파일을 추가
모드로 열어, <br>A~Z 문자열을 추가하고 파일을 닫습니다. 다음 해당 파일을 읽기
모드로 열어 파일의 크기만큼 읽어 그 내용을 출력하는 간단한 형태의 예제였습니다.

참. 파일의 크기를 검사한 이유는 문자열이 무조건 추가되지 않도록 하기
위해서였습니다. ^^


▷ 파일의 수정

기존 파일의 내용을 수정하는 방법에는 크게 두가지가 있습니다. 기존 내용을 읽고,
필요부분 변경 후 새롭게 파일을 기록하는 방법과, 기존 내용을 그대로 둔 채 그 위에
덮어씌우는 방법이 있습니다. 두번째 방법의 경우 길이가 똑같지 않을 경우
뒷부분까지 영향을 받기 때문에 조금 더 신경써야합니다. 두번째 방법의 경우를 먼저
예로 들어보겠습니다.


예제 : http://dreamphp.com/study/exam16-2.txt

소스는 다음과 같습니다.

11111
22222
33333
44444
55555


위의 파일의 내용 중 3번째 줄의 33333 중에서도 가운데 333만 AAA로 변경해보도록
하겠습니다.

예제 : http://dreamphp.com/study/exam16-2.php

소스는 다음과 같습니다.

<?
$filename = "exam16-2.txt";
$fp = fopen($filename,"r+");
$data = fread($fp,filesize($filename));
$pointer = strpos($data,"33333");
fseek($fp,$pointer+1);
fwrite($fp,"AAA");
fclose($fp);
?>

먼저 파일명을 지정한 다음, 해당 파일을 읽기+ 모드로 엽니다. 만약 r 모드로
열었다면 읽기만 가능했을 것이고, a나 a+ 모드로 열었다면 기록되는 내용이 끝에
붙고, w나 w+ 모드로 열었을 경우에는 새롭게 기록하는 내용만 남아있게 됩니다.
그렇기 때문에 r+ 모드를 이용하는 것입니다.

그 다음 파일의 내용을 그대로 $data 변수에 읽어들인 다음 strpos() 함수를 이용해
문자열 33333이 나타나는 위치를 구해 $pointer 변수에 넣습니다. 그 다음 fseek()
함수를 이용해 파일 내의 포인터를 위에서 구한 위치보다 1칸 더 이동합니다. 그럼
33333 중에서 두번째 3을 가리키는 위치로 포인터가 이동해있겠죠?

그리고 마지막으로 AAA란 문자열을 기록하고 닫았습니다. 결국 최종적으로 파일의
내용은 다음처럼 변경됩니다.

11111
22222
3AAA3
44444
55555


파일을 이용해 프로그램을 작성할 경우 특정 데이터의 일부 값만 변경함으로써 삭제된
글인지, 공지글인지의 여부를 지정할 수도 있으며~ 또는 온라인 파일 에디터도 만들 수
있습니다. (save 파일을 업로드하고, 이를 수정해 다시 다운로드 받는 방식)


▷ 파일의 제어

파일의 삭제는 unlink(파일명); 이란 함수를 사용합니다. 해당 파일의 타인에 대한
권한(nobody) 중 쓰기 권한이 있어야 가능합니다.

파일이 존재하고 있는지의 여부는 file_exists(파일명) 함수를 이용합니다. if 문에서
사용하면 효과적이죠. 아래처럼 쓰입니다.

if (file_exists("test.dat")) { // 파일이 존재하면 참을 반환
  // 조건이 참일 경우 수행할 명령;
}

파일의 이름 변경은 rename(기존파일명,바꿀파일명) 함수를 이용합니다.

실제 파일을 이용한 프로그램을 작성할때 많이 나오게 되니 지금의 기초적인 내용에
대해서 잘 기억하고 계셔야 합니다.


▷ 특수기호

화면상에서는 다음의 특수 기호 중 n이나 r, t 등을 확인할 수 없습니다. HTML로
표현되기 때문에 특수기호 등은 모두 하나의 공백으로 인식되기 때문이죠.

n ... 개행(newline) 다음줄.
r ... 캐리지리턴(carriage return)
t ... 수평 탭(horizontal Tab)
... 표시 (backslash)
$ ... $ 표시 (dollar sign)
" ... " 표시 (double-quote)

"korea"란 문자열을 출력하기 위해서는 echo ""korea""; 이런 식으로 해야 합니다.
$a를 표현할때 $a에 값이 할당되어 있을 경우 그 값이 출력되기 때문에 앞에 /를
붙여야 그대로 표현할 수 있습니다.

파일을 이용한 프로그램을 작성할 경우 파일에 기록되는 내용이 중요합니다.
화면상에 출력되지 않지만 n을 이용해 다음줄, t를 이용해 탭 등을 기준으로 값을
잘라 사용하면 편하거든요.


예제 : http://dreamphp.com/study/exam16-3.php

소스는 다음과 같습니다.

<?
echo "Korea<br>"; // Korea 출력
echo ""Fighting!"<br>"; // "Fighting" 출력
echo "nHello<br>"; // Hello 출력
echo "tEverybody<br>"; // Everybody 출력
echo "slash<br>"; // slash 출력
echo "n예제끝"; // 예제끝 출력
?>

위 예제를 실행하면 화면에는 다음처럼 출력됩니다.

Korea
"Fighting!"
Hello
Everybody
slash
예제끝

하지만 소스보기를 하면

Korea<br>"Fighting!"<br>
Hello<br>        Everybody<br>slash<br>
예제끝

이렇게 나옵니다. n이 쓰여진 곳마다 다음 줄로 내려간 것을 확인할 수 있겠죠?
특수기호는 이 예제를 끝으로 막을 내립니다.


▶ 메모장 등의 실제 사용될 수 있는 작은 프로그램을 만들 순간이 점점 다가오고
있습니다. ^^

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (5) 선물 (0명)
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11846
관리자
2003-09-20
11396
관리자
2003-09-20
20525
지구인
2010-08-27
19327
지구인
2009-09-07
13648
SOLIDH
2010-01-29
15602
엔죠라이프
2004-10-07
16702
광수
2001-10-17
424
광수
2001-10-17
575
광수
2001-10-17
718
광수
2001-10-17
372
광수
2001-10-17
445
광수
2001-10-17
709
광수
2001-10-17
591
광수
2001-10-17
564
광수
2001-10-17
597
광수
2001-10-17
502
광수
2001-10-17
622
광수
2001-10-17
832
광수
2001-10-17
792
광수
2001-10-17
628
광수
2001-10-17
785
광수
2001-10-17
450
광수
2001-10-17
508
광수
2001-10-17
445
광수
2001-10-17
656
광수
2001-10-17
508
광수
2001-10-17
732
모이자 모바일