주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

[Tip] PHP에서 파일 처리할때...

네로 | 2003.02.24 00:10:49 댓글: 0 조회: 426 추천: 4
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758892
홍길동이 길을 가다 무척 응가가 마려워 공중 화장실에 들어갔습니다.

그런데 잠금 장치가 고장나서 어쩔 수 없이 그냥 볼일을 보고 있었습니다.

이때 갑자기 문이 벌컥 열리며 임걱정이 나타났습니다.

홍길동과 임걱정은 서로를 보며 경악할 수 밖에 없었습니다.

한 사람은 한창 일을 보고 있고, 임걱정은 급한 나머지 바지를 내리며

들어왔기 때문입니다.

...

참으로 난감한 순간이죠? 파일을 읽거나 쓰기를 할때도 이런 문제점이 생길 수 있습니다.

항공 예약 시스템을 예로 들자면 동시에 두 사람이 같은 시간의 같은 좌석의 표를 예매했을 경우

만약 두 사람 모두에게 판매가 된다면 나중에 둘 중 한사람은 비행기를

탈 수 없겠죠. 참 위험합니다. 때문에 임계영역이니 머니 하는... [하도

놀았더니 까막까막 합니다...] 말들이 나온거죠.

파일 처리에서도 이를 지키지 않으면 데이터가 유실되는 경우가 발생할 수

있습니다. 누군가 파일을 기록하려는 찰나에 다른 사람이 접근해서

다른 내용으로 기록을 하고, 다시 원래의 사람이 기록하려 할때 에러가

생기거나 잘못 기록되게 되면... 데이터는 유실되는 것이죠.

뭐 말이 딥따 길어졌는데 이를 방지하기 위해 함수 하나를 올리려고 왔습니다.

강좌란에 해피가 강좌를 올려주고 있지만, STUDY란의 활성화를 위해! 뽀하하...

flock() 함수입니다. 형식 등에 대해선 마찬가지로 함수 검색기를 이용해 함 보세요.

그냥 가장 중요한 두개만 보기로 하겠습니다. 읽기와 쓰기. ^^; 켜켜...

======================================================================

1. 파일에서 값을 읽을 때

<?
$file = fopen("test.dat","r"); // test.dat 파일을 읽기 모드로 오픈
$temp = fread($file, filesize("test.dat")); // test.dat 크기만큼 읽어들임
fclose($file); // 파일 닫기
?>

기본적인 파일 읽는 순서죠. 여기에서 test.dat 파일을 선택해 fread() 함수를 통해 내용을 읽었죠?

이 순간에 다른 쪽에선 파일에 대한 수정이 일어나고 있다면 어떤 일이 일어날까요?

일반 사람들은 몇초, 몇분, 몇시간 대수롭지 않게 생각하는데 (코리안 타임... -_-;;;)

이런 눈깜짝할 시간의 배의 배의 배에 해당하는 엄청나게 허벌나게 짧은 시간에도

파일은 깨질 수도 있는겁니다... 변경도 되고, 읽히기도 하고...

자! 여기에 flock() 함수를 이용해 봅시다. [오늘은 서론이 디게 길다. 그죠?]

<?
$file = fopen("test.dat","r");
flock($file,1);
$temp = fread($file, filesize("test.dat"));
flock($file,3);
fclose($file);
?>

두번째, 네번째 줄에 추가된 사항이 보이죠? flock(파일포인터,모드)를 이용해

파일로부터 값을 읽기 전에 락을 걸어놨습니다. 그럼 이 순간부터

그 파일에 대해서는 읽기만 가능하게 됩니다. 다른 사용자들로부터의

접속에 안전하게 되는 거지요... 뽀하하... 이게 뽀인뜨...

그 다음 값을 다 읽었으면 그때부터 해제를 합니다... (쉽게 생각해요)

======================================================================

2. 파일에 값을 기록할 때

<?
$file = fopen("test.dat","w"); // 쓰기 모드로 파일 오픈
fwrite($file, "haha"); // 값 기록
fclose($file); // 파일 닫기
?>

지극히 평범한 test.dat 파일에 haha란 단어를 쓰는 코드였습니다.

그냥 예였을 뿐이고 실제 이런 형식으로 여러 값들이 파일에 기록되게

되죠. 만약 파일이 기록되는 순간 다른 곳으로부터 다른 값으로 기록이

된다면...? 머... 문제점들은 알아서 생각하세엽... [홍길동과 임걱정이

한 화장실에서 한 변기를 놓고 응가를 같이 볼 수 있었을까엽? 동시에. -_-;;;]

이때 사용하는 모드는 2 입니다.

<?
$file = fopen("test.dat","w");
flock($file, 2);
fwrite($file, "haha");
flock($file, 3);
fclose($file);
?>

마찬가지로 두 줄 추가된게 보이죠? 2는... 쓰기 모드입니다. 이제부터

이 파일 기록할 거니까 다른 곳에선 접근 못함이다 하구...

그리고 무사히 파일에 값을 기록하고 나서는 락 해제를 합니다.

어때요~? 쉽죠...???

파일을 읽거나 기록할때 이 두줄을 이용함으로써 안정적으로 운영할 수 있죠...

그럼 빠빠~~~~~~

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

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (4) 선물 (0명)
IP: ♡.27.♡.234
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11967
관리자
2003-09-20
11522
관리자
2003-09-20
20665
지구인
2010-08-27
19449
지구인
2009-09-07
13769
SOLIDH
2010-01-29
15727
엔죠라이프
2004-10-07
16822
네로
2003-02-24
629
네로
2003-02-24
562
네로
2003-02-24
1122
네로
2003-02-24
654
네로
2003-02-24
438
네로
2003-02-24
478
네로
2003-02-24
470
네로
2003-02-24
426
네로
2003-02-24
386
네로
2003-02-24
438
네로
2003-02-24
425
네로
2003-02-24
428
네로
2003-02-24
525
네로
2003-02-24
514
네로
2003-02-24
1442
네로
2003-02-24
718
네로
2003-02-24
568
네로
2003-02-24
538
네로
2003-02-24
676
네로
2003-02-24
628
네로
2003-02-24
489
모이자 모바일