워누입니다! 

오늘은 어제 포스팅한 파일 쓰기에 이어서 파일을 읽는 방법을 포스팅해보고자 합니다! 

파일을 작성하는 것 만큼 읽어오는 것도 중요하게 쓰입니다!

이것도 잘 익혀두면 필요할 때마다 유용하게 쓸 수 있거든요ㅎㅎ

 

txt 파일 쓰는 방법은 어제 포스팅(https://seoneu.tistory.com/20?category=395796)을 참고해주세요!

 

그럼 거두절미하고, 바로 보여드리겠습니다. 


[파일 읽기 소스코드 - filereadTest.php]

<?php 

//내용을 읽어올 파일명
$fileName = "fwriteTest.txt";


if(file_exists($fileName)){
	//파일 열기 
	$fp = fopen($fileName, 'r');
	if($fp){
		//파일 읽기 
		$fr = fread($fp, filesize($fileName));
		if($fr){
			//내용 출력
			echo $fr;
			//파일 닫기
			fclose($fp);
		} else { 
			echo "파일 읽기에 실패하였습니다.";
		} //end if_fr
	} else { 
		echo "파일 열기에 실패하였습니다."; 
	} //end if_fp
} else { 
	echo "파일이 존재하지 않습니다."; 
} //end if_fe

?>

이전 포스팅 내용을 확인한 후 위 소스를 보면 이해가 빠를 겁니다! 

fopen이 파일 열기 함수였으니 위 소스를 그대로 가져와서 예시를 들게요!

 

파일 열기 함수[fopen()] : $fp = fopen($fileName, 'r'); // r -> 읽기 권한을 말합니다.

파일 읽기 함수[fread()] : $fr = fread($fp, '불러올 파일의 용량');

파일 용량 확인[filesize()] : filesize('불러올 파일 경로와 파일명');

파일 존재 여부 확인 함수 [file_exists()] : file_exists('파일명');

 

fread() 함수를 사용하려면 파일 용량을 알아야 하는데 그 용량을 일일이 체크하지 않고 filesize() 함수로 가져올 수 있습니다. (byte 단위로 가져옵니다.) 그리고 읽으려는 파일의 존재 여부를 체크하기 위해 file_exists() 함수를 사용하였습니다. 괄호 안에 파일 명이 존재하면 true를 반환하고, 존재하지 않는다면 false를 반환합니다. 

 

그래서 위 소스를 실행하면 어제 만들어놨던 fwriteTest.txt 파일의 내용을 그대로 읽어옵니다.

.

fwriteTest.txt
filereadTest.php 실행결과

만약 없는 파일명이나 파일이 존재하지 않는다면 if문이 아닌 else문이 동작하여 다른 결과가 나오니까, 

직접 테스트해보시길 바랍니다 ㅎㅎ

.

파일을 읽어오는 함수가 fread만 있는건 아니더라구요!

찾아보니 fgets()라는 함수가 있는데, 파일 내용을 한 라인씩 읽어오는 함수라고 하더라구요.

(이런 것도 몰랐는데 그동안 개발은 어떻게 했니 나레기야..)

.

여튼, 쓰는 방법은 이렇게 쓴다고 합니다.

$fg = fgets($fp, '불러올 용량')

.

이걸 기반으로 소스코드를 아래와 같이 적어보았습니다.


[파일 한줄씩 읽기 소스코드 - fgetsTest.php]

<?php 

//내용을 읽어올 파일명
$fileName = "fgetstext.txt";


if(file_exists($fileName)){
	//파일 열기 
	$fp = fopen($fileName, 'r');
	
	//파일 용량의 크기가 얼마나 될지 몰라서 filesize() 함수 사용
	$readByte = filesize($fileName);
	if($fp){
		$fg=fgets($fp,$readByte);
		echo $fg."<br>";
	} //end if_fp 
} //end if_fe

?>

[미리 적어놓은 fgetstext.txt, 라인을 구분하기 위해 번호를 적었습니다!]

더보기

1 : fgetsTest
2 : 티스토리
3 : 만세!


fgetsTest.php를 실행해봅시다.

fgetsTest.php 실행 결과

정말 한줄만 읽어와서 가져오네요! fread()랑은 다른 용도로 잘 사용할 수 있을 것 같습니다. 

이걸 반복문을 돌리면 다 읽어올 수 있을것 같네요!

fgetsTest.php를 수정해보겠습니다. 

 


[fgetsTest.php, 반복문 추가]

<?php 

//내용을 읽어올 파일명
$fileName = "fgetstext.txt";


if(file_exists($fileName)){
	//파일 열기 
	$fp = fopen($fileName, 'r');
	
	//파일 용량의 크기가 얼마나 될지 몰라서 filesize() 함수 사용
	$readByte = filesize($fileName);
	if($fp){
    	// 수정한 부분 -> while을 이용한 반복문을 돌림.
        // fgets() 함수 사용 시, 더이상 불러올 용량이 없으면 false 반환!
		while($fg=fgets($fp,$readByte)){
			echo $fg."<br>";
		} // end while_fgets
	} //end if_fp 
} //end if_fe

?>

반복문을 추가했으니 다시 한 번 실행해보겠습니다. 

 

수정한 fgetsTest.php 결과.

오.. 예상한 그대로 나오니 짧은 코드를 쓰더라도 뭔가 뿌듯하네요ㅋㅋㅋ (이런거에 만족하는 초급개발자란..)

 

이전 포스팅이나 오늘 포스팅이나 회사에서는 주로 개발한 내용에 대해서 요청-응답 기록을 남기기 위해 로그 파일을 찍고 읽어오도록 소스 코드를 작성할 때가 많을 것입니다. 그러다보니 쉬워 보이는 내용이지만 실제로 많이 쓰이는 함수라고 보시면 될 것 같습니다!

 

오늘 포스팅은 여기서 마치도록 하겠습니다아~!!

+ Recent posts