본문 바로가기

IT

[PHP] 파일 열기, 쓰기, 닫기 fopen(), fwrite(), fclose()

example.php
<?php
$memo = $_POST['memo']

$example = fopen("/volume1/web/example/example.txt", 'ab');

fwrite($example, $memo, strlen($memo));

fclose($example);

?>


■파일 열기
 파일 열기는 fopen("열 파일의 경로 및 이름", "파일 모드"); 의 형태로 사용합니다. 위의 예에서는 본인이 사용하는 NAS(Network Attached Storage)의 경로를 사용하였습니다.
 * 문서 트리의 루트 디렉토리는 미리 정의된 서버 변수인 $_SERVER['DOCUMENT_ROOT'] 입니다.
 fopen() 함수가 반환하는 포인터는 $example 변수에 저장이 되기에, 파일에 접근하려면 $example을 사용하면 됩니다.

 경로를 지정할 때는 상대 경로로 하거나 절대 경로로 하는 방법이 있습니다. 절대 경로는 디렉토리 구조가 바뀌었을 경우 절대 경로로 접근하는 부분을 직접 바꿔야 하는 수고로움이 있으므로, 상대 경로를 사용하는 것이 좋습니다.

 아래 표는 "성공적인 웹 프로그래밍 PHP와 MySQL"이라는 책에서 가져온 설명입니다. 간단히 말해서

읽기 전용일 때는 'rb'를, 쓰기 전용일 때는 'wb'를, 데이터를 누적시킬 때는 'ab'를 사용

하시면 됩니다.

더보기

 

r 읽기 모드  파일을 읽기 전용으로 연다. 파일의 처음에서 시작한다.
r+ 읽기 모드  파일을 읽고 쓰기 위해 연다. 파일의 처음에서 시작한다.
w 쓰기 모드  파일을 쓰기 전용으로 연다. 파일의 처음에서 시작한다. 만약 파일이 있을 경우 먼저 있던 내용은 지운다. 만약 파일이 없다면 새로 만든다.
w+ 쓰기 모드  파일을 읽고 쓰기 위해 연다. 파일의 처음에서 시작한다. 만약 파일이 있을 경우 먼저 있던 내용은 지운다. 만약 파일이 없다면 새로 만든다.
x 경고 쓰기  파일을 쓰기 위해 연다. 파일의 처음에서 시작한다. 만약 파일이 있을 경우 파일을 열지 않고 fopen()은 false를 반환하고 PHP는 경고를 낸다.
x+ 경고 쓰기  파일을 읽고 쓰기 위해 연다. 파일의 처음에서 시작한다. 만약 파일이 있을 경우 파일을 열지 않고 fopen()은 false를 반환하고 PHP는 경고를 낸다.
a 추가 모드  파일을 추가하기(쓰기) 위해 연다. 현재 있는 내용의 끝에서 시작한다. 만약 파일이 없다면 새로 만든다.
a+ 추가 모드  파일을 읽고 추가하기(쓰기) 위해 연다. 현재 있는 내용의 끝에서 시작한다. 만약 파일이 없다면 새로 만든다.
b 바이너리 모드  다른 모드들과 합쳐서 사용한다. 바이너리와 텍스트 파일을 구별하는 경우에만 사용할 수 있다. 윈도우즈에서는 구별하며 유닉스에서는 구별하지 않는다. 이동성을 높이기 위해 항상 이모드를 사용하는 것이 좋다. 바이너리 모드가 기본값이다.
t 텍스트  다른 모드들과 합쳐서 사용한다. 이 모드는 윈도우즈 시스템에서만 사용할 수 있다. 코드를 b 옵션으로 사용하도록 바꾸고 난 뒤가 아니라면 t 옵션은 사용하지 않는 편이 좋다.

■파일 쓰기
 파일 쓰기는 fwrite(연 파일의 변수명, 입력한 데이터가 저장된 변수명, 최대 문자수); 의 형태로 사용하며, 딱히 문자수 제한이 필요 없을 경우에는 위의 예와 같이 strlen($memo)로 쓰면 됩니다.
 이렇게 $memo에 저장된 데이터를 $example이 가리키는 파일에 쓸 수 있습니다.

■파일 닫기
 파일 닫기는 단순히 fclose(연 파일의 변수명); 으로 사용할 수 있습니다.