...
PHP 파일 열기
파일 모드에 't' 플래그를 추가하면, 해당 파일을 텍스트 모드(text mode)로 열게 됩니다. 텍스트 모드로 열린 파일은 파일 내부에 존재하는 줄 바꿈 문자('\n', '\r\n')를 해석하여 실제로 줄 바꿈 된 상태로 전달할 것입니다.
파일 모드에 'b' 플래그를 추가하면, 해당 파일을 바이너리 모드(binary mode)로 열게 됩니다. 바이너리 모드로 열린 파일은 파일 내부에 존재하는 줄 바꿈 문자('\n', '\r\n')를 해석하지 않고 그대로 전달할 것입니다.
$fp = fopen("list.txt", 'a');
파일 모드
|
설명
|
r
|
파일을 읽기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치함.
|
r+
|
파일을 읽고 쓰기 위해 열고, 파일 포인터는 파일의 시작 부분에 위치함.
|
w
|
파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치함.
만약 파일이 존재하면 덮어쓰고, 파일이 없다면 새로 생성함.
|
w+
|
파일을 읽고 쓰기 위해 열고, 파일 포인터는 파일의 시작 부분에 위치함.
만약 파일이 존재하면 덮어쓰고, 파일이 없다면 새로 생성함.
|
a
|
파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 끝부분에 위치함.
만약 파일이 존재하면 이어 쓰고, 파일이 없다면 새로 생성함.
|
a+
|
파일을 읽고 쓰기 위해 열고, 파일 포인터는 파일의 끝부분에 위치함.
만약 파일이 존재하면 이어 쓰고, 파일이 없다면 새로 생성함.
|
x
|
파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치함.
만약 파일이 존재하면 false를 반환하고 오류를 발생시킴.
|
x+
|
파일을 읽고 쓰기 위해 열고, 파일 포인터는 파일의 시작 부분에 위치함.
만약 파일이 존재하면 false를 반환하고 오류를 발생시킴.
|
c
|
파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치함.
만약 파일이 없다면 새로 생성하고, 파일이 존재하면 파일을 덮어쓰지도 않고 오류를 발생시키지도 않음.
|
c+
|
파일을 읽고 쓰기 위해 열고, 나머지는 'c'와 같음.
|
PHP 파일 읽기
fgets()
fgets() 함수는 해당 파일에서 데이터를 한 번에 한 줄씩 읽어들입니다.
이 함수는 파일 포인터가 파일의 끝에 도달하거나, 줄 바꿈 문자를 만날 때까지 계속 수행됩니다.
$fp = fopen("list.txt", 'r'); // list.txt 파일을 읽기 전용으로 열고 반환된 파일 포인터를 $fp에 저장함.
while(!feof($fp)){ // feof() 함수는 전달받은 파일 포인터가 파일의 끝에 도달하면, true를 반환
$member = fgets($fp); // 한 줄씩 $member 변수에 저장하고
echo $member."<br>"; // 출력함.
}
fgetc()
fgetc() 함수는 해당 파일에서 데이터를 한 번에 한 글자씩 읽어 들입니다.
$fp = fopen("list.txt", 'r'); // list.txt 파일을 읽기 전용으로 열고 반환된 파일 포인터를 $fp에 저장함.
while(!feof($fp)){ // 파일의 끝까지
$char = fgetc($fp); // 한 글자씩 $char 변수에 저장하고
if($char == "\n") // 반환된 문자가 줄 바꿈 문자일 때, 해당 문자를 HTML <br>태그로 바꿔줌
$char = "<br>";
if(!feof($fp))
echo $char;
}
readfile()
readfile() 함수는 해당 파일에서 데이터를 한 번에 모두 읽어 들입니다.
echo readfile("list.txt");
PHP 파일 쓰기
PHP에서는 파일에 데이터를 쓰기 위해 fwrite() 함수와 fputs() 함수를 제공합니다.
위의 두 함수 모두 해당 파일에 문자열을 저장하는 작업을 수행합니다. fwrite는 바이너리로 작성한다는 점 말고는 fputs와의 차이는 없습니다.
$name = $_POST["name"]; // 전송받은 데이터 대입
$gender = $_POST["gender"];
$email = $_POST["email"];
echo "이름 : ".$name."<br/>"; // 데이터 출력
echo "성별 : ".$gender."<br/>";
echo "이메일 : ".$email;
$fp = fopen("list.txt", 'a'); // list.txt 파일을 쓰기 전용으로 열고 반환된 파일 포인터를 $fp에 저장.
$str = $name."\t".$gender."\t".$email."\n";
fwrite($fp, $str); // list.txt 파일에 $str 변수를 저장함.
fclose($fp); // list.txt 파일 닫음.
echo "회원 등록 완료";
PHP 파일 닫기
파일이 정상적으로 닫혔을 때는 true를 반환하며, 그렇지 않을 때는 false를 반환합니다.
fclose($fp);
PHP 파일 기타 함수
파일 존재 여부 확인
file_exists() 함수는 전달받은 파일이나 디렉터리가 존재하는지를 검사합니다.
if(file_exists("list.txt"))
echo "파일이 존재합니다.";
else
echo "파일이 존재하지 않습니다.";
파일 크기 확인
filesize() 함수는 전달받은 파일의 크기를 바이트 값으로 반환합니다.
echo filesize("list.txt");
PHP 파일 내부 탐색
fopen() 함수의 결과로 반환된 파일 포인터를 이용하면, 파일 내부를 직접 탐색할 수도 있습니다.
PHP에서는 파일 포인터의 위치를 변경하는 다음 함수를 제공합니다.
- ftell() : 전달받은 파일 포인터가 현재 가리키고 있는 위치를 반환합니다.
- rewind() : 전달받은 파일 포인터를 해당 파일의 맨 처음으로 이동시킵니다.
- fseek() : 전달받은 파일 포인터를 특정 위치로 이동시킵니다.
$fp = fopen("list.txt", 'r'); // list.txt 파일을 읽기 전용으로 열고 반환된 파일 포인터를 $fp에 저장함.
while(!feof($fp)){ // 파일의 끝까지
$member = fgets($fp); // 한 줄씩 $member 변수에 저장하고
echo $member."<br/>"; // 출력함.
}
echo ftell($fp)."<br>"; // 현재 파일 포인터는 파일의 끝부분을 가리킴.
rewind($fp); // 파일 포인터를 파일의 시작 부분으로 이동시킴.
echo ftell($fp);
fseek() 함수는 첫 번째 인수로 파일 포인터를 전달받습니다.
두 번째 인수로는 세 번째 인수를 기준으로 얼마만큼 파일 포인터를 옮겨야 하는지에 대한 오프셋을 전달받습니다.
세 번째 인수는 오프셋 기준을 나타내며, 생략하면 SEEK_SET(파일의 처음)을 기본값으로 설정합니다.
오프셋 기준으로 전달할 수 있는 값은 다음과 같습니다.
- SEEK_SET : 파일의 처음을 기준으로 함. (기본 설정)
- SEEK_CUR : 파일 포인터의 현재 위치를 기준으로 함.
- SEEK_END : 파일의 끝을 기준으로 함.
$fp = fopen("list.txt", 'r');
fseek($fp, 0, SEEK_END); // 파일 포인터를 파일의 끝으로 이동시킴.
echo ftell($fp)."<br>";
fseek($fp, 0); // 파일 포인터를 파일의 맨 처음으로 이동시킴.
echo ftell($fp);
PHP 파일 삭제
unlink() 함수는 전달받은 주소에 위치한 파일을 삭제합니다.
if(unlink("list.txt"))
echo "파일 삭제 성공";
else
echo "파일 삭제 실패";
# 참고자료
https://tcpschool.com/php/php_fileHandling_etc
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.