PHP 파일 읽기/쓰기
오래 안쓰다보면 잊어먹게 된다. 알기쉽게 직접 정리를 해봐야겠음.
1. 파일 열기
파일 IO 작업을 하기 위해선 해당 파일을 열어서 변수에 담아야한다.
우리는 fopen($file_url, $mode) 함수를 통해 파일을 열 수 있다.
첫번째 인자는 파일명을 입력하면 된다.
다른 디렉토리에 있는 파일이라면 디렉토리까지 기재해주면 된다.
두번째 인자는 파일 입출력 모드를 설정해주면 되는데, 모드는 2가지가 합쳐져서 만들어진다.
파일 접근모드 + 데이터 입출력 모드
파일 접근모드에는 r, r+, w, w+, a, a+, x, x+ 8가지가 있고,
데이터 입출력 모드는 b, t 2가지가 있다.
r |
읽기만 가능 |
파일포인터가 파일의 처음에서 시작 |
r+ |
읽기, 쓰기 모두 가능 |
파일포인터가 파일의 처음에서 시작 |
w |
쓰기만 가능 |
파일 존재시 기존 내용을 지우고 시작 |
w+ |
읽기, 쓰기 모두 가능 |
파일 존재시 기존 내용을 지우고 시작 |
a |
쓰기만 가능 (내용 추가모드) |
파일포인터가 파일의 끝에서 시작 |
a+ |
읽기, 쓰기 모두 가능 (내용 추가모드) |
파일포인터가 파일의 끝에서 시작 |
b |
바이너리 모드 |
바이너리 모드로 파일을 연다. |
t |
텍스트 모드 |
윈도우에서만 사용가능, 보통 잘 안씀 |
보통 사용할땐 [파일 접근모드 + 데이터 입출력모드] 형식으로 쓰는데
데이터 입출력모드는 생략이 가능하다. (자동으로 바이너리모드로 설정이됨)
예) wb, r+b 는 각각 w, r+ 로 생략이 가능함.
그런데 보통 + 붙은 모드가 읽기, 쓰기가 모두 가능하므로 더 좋다고 생각할 수도 있겠다.
그러나 이러한 모드에선 읽기 쓰기 작업을 변경할때마다 입,출력 버퍼를 비워줘야되는 작업을 해주어야한다.
따라서 보통은 r, w, a 로 읽기와 쓰기할 파일을 따로따로 여는것이 일반적이다.
2. 파일 읽기 및 쓰기
입출력 함수는 다양하게 존재하지만 일반적으로 쓰는 함수만 작성한다.
파일 읽기 : fgets($file)
파일 쓰기 : fputs($file, $content)
C언어를 공부한 사람들이라면 함수이름이 익숙할 것이다. PHP는 C에서 파생된 언어이기 때문이다.
설명하면 귀찮으니 간단하게 소스를 소개하겠다.
url.txt를 읽어와서 result.txt에 내용을 그대로 입력시키는 소스이다.
<?php
$f_url = fopen("url.txt", "rb");
$f_result = fopen("result.txt", "wb");
while( !feop($f_url) ) {
$url = fgets($f_url);
fputs($f_result, $url);
}
fclose($f_url);
fclose($f_result);
?>
fclose 함수는 아래 3번에서 설명한다.
3. 파일 닫기
파일을 열었으면 닫아야하지 않겠는가?
물론 당장에 닫지 않는다고 갑자기 오류가 나지는 않지만
"조금 더 좋은 코드를 만들고싶다!" 라는 생각이 있을땐 무조건 닫아주자.
컴퓨터는 그 무엇이든 열면 언젠가는 닫아줘야된다.
파일 닫기 : fclose($file);
간단히 2번의 예제를 통해 확인할 수 있다.
참고로 파일을 관리하다보면 필연적으로 오류가 발생할 가능성이 크므로,
오류 처리 로직을 만들어주는게 좋다. 자세한건 검색하면 많이나옴