파일 읽기

파일 읽기

■파일 처리

파일이란 의미있는 정보를 담고 있으며, 이름을 가지고 있는 저장 장치상의 논리적인 단위를 의미

PHP에서는 데이터를 파일에 저장할 수도 있으며, 파일로부터 데이터를 읽어 들일 수도 있다.

■파일 처리 과정

· 파일 읽기

1. 파일 열기, 열리지 않으면 종료

2. 파일에서 데이터 읽기

3. 파일 닫기

· 파일 쓰기

1. 파일 열기, 파일이 없으면 생성

2. 파일에 데이터 쓰기

3. 파일 닫기

ex) 회원 가입을 위한 간단한 form 예제

이름 : 성별 : 여자 남자 이메일 :

위의 예제를 통해 사용자가 입력한 회원 가입 정보를 서버 측에서 처리하는 PHP 스크립트 예제

$name = $_POST["name"]; // 전송받은 데이터 대입 $gender = $_POST["gender"]; $email = $_POST["email"]; echo "이름 : ".$name.""; // 데이터 출력 echo "성별 : ".$gender.""; echo "이메일 : ".$email;

■파일 열기

fopen() : 파일을 열 수 있다.

첫 번째 인수로 열 파일의 주소를 전달하고, 두 번째 인수로 파일에 대한 접근 권한을 명시하는 파일 모드를 전달한다.

파일 모드 설명 r 파일을 읽기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치 r+ 파일을 읽고 쓰기위해 열고, 파일 포인터는 파일의 시작 부분에 위치 w 파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치

만약 파일이 존재하면 덮어쓰고, 파일이 없다면 새로 생성 w+ 파일을 읽고 쓰기 위해 열고, 파일 포인터는 파일의 시작 부분에 위치

만약 파일이 존재하면 덮어쓰고, 파일이 없다면 새로 생성 a 파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 끝부분에 위치

만약 파일이 존재하면 이어쓰고, 파일이 없다면 새로 생성 a+ 파일을 읽고 쓰기위해 열고, 파일 포인터는 파일의 끝부분에 위치

만약 파일이 존재하면 이어쓰고, 파일이 없다면 새로 생성 x 파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치

만약 파일이 존재하면 false를 반환하고 오류를 발생시킴 x+ 파일을 읽고 쓰기위해 열고, 파일 포인터는 파일의 시작 부분에 위치

만약 파일이 존재하면 false를 반환하고 오류를 발생시킴 c 파일을 쓰기 전용으로 열고, 파일 포인터는 파일의 시작 부분에 위치

만약 파일이 없다면 새로 생성하고, 파일이 존재하면 파일을 덮어쓰지도 않고 오류를 발생시키지 않음 c+ 파일을 읽고 쓰기위해 열고, 나머지는 'c'와 같음

윈도우 시스템에서는 위와 같은 파일 모드 뒤에 't'와 'b'플래그를 추가하여 해당 파일의 텍스트 모드와 바이너리 모드를 명시할 수 있다.

파일 모드에 't'플래그를 추가하면, 해당 파일을 텍스트 모드로 열게된다.

텍스트 모드로 열린 파일은 파일 내부에 존재하는 줄 바꿈 문자('

', '\r

')를 해석하여 실제로 줄 바꿈된 상태로 전달

파일 모드에 'b'플래그를 추가하면 해당 파일은 바이너리 모드로 열게된다.

바이너리 모드로 열린 파일은 파일 내부에 존재하는 줄 바꿈 문자를 해석하지 않고 그대로 전달

※ fopen()을 사용하여 파일을 열 때 서로 다른 운영체제와 PHP 버전 간의 이식성을 고려하여 항상 'b'플래그를 추가하는 것이 좋다.

ex) list.txt 파일을 쓰기 전용으로 연 후, 파일 포인터를 파일의 끝부분에 위치시키는 예제

$fp = fopen("list.txt", 'a');

■파일 읽기

파일의 데이터를 읽기 위한 함수들

1. fgets()

2. fgetc()

3. readfile()

■fgets()

해당 파일에서 데이터를 한 번에 한 줄씩 읽어들인다.

파일 포인터가 파일의 끝에 도달하거나, 줄 바꿈 문자를 만날 때까지 계속 수행한다.

$fp = fopen("list.txt", 'r'); // list.txt 파일을 읽기 전용으로 열고 반환된 파일 포인터를 $fp에 저장함. while(!feof($fp)){ // 파일의 끝까지 $member = fgets($fp); // 한 줄씩 $member 변수에 저장하고 echo $member.""; // 출력함. }

feof() : 전달받은 파일 포인터가 파일의 끝에 도달하면, true를 반환

■fgetc()

해당 파일에서 데이터를 한 번에 한 글자씩 읽어들인다.

전달받은 파일 포인터가 가리키는 문자를 반환

$fp = fopen("list.txt", 'r'); // list.txt 파일을 읽기 전용으로 열고 반환된 파일 포인터를 $fp에 저장 while(!feof($fp)){ // 파일의 끝까지 $char = fgetc($fp); // 한 글자씩 $char 변수에 저장 if($char == "

") // 출력 $char = ""; if(!feof($fp)) echo $char; }

※ fgetc()는 바이너리 데이터를 안전하게 처리할 수 있다.

■readline()

해당 파일에서 데이터를 한 번에 모두 읽어들인다.

전달받은 파일 포인터가 가리키는 파일의 데이터를 모두 읽은 후, 출력 버퍼에 저장

echo readfile("list.txt");

■파일 닫기

fclose() : 파일을 닫는다.

fclose($fp);

from http://woong971.tistory.com/80 by ccl(A) rewrite - 2021-11-04 12:00:52